亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述消息推送之百度云推送Android集成与用法相关的知识,希望能为你提供帮助。
这两天因为项目须要。研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路。
好在我耗费了N多个毫毫秒秒后稀里哗啦的闯了过来。
在此先吐槽一下。这个云推送尽管没多少东西,但对于初次接触的人来说还是有点不利索的,所以肯定要看官方文档。仅仅是不知是百度哪个哥们做的文档。pdf做的也太不地体贴了:英文字符里面居然有中文空格,拷贝到自己的项目中发现江山一片红,娘的。这猛一看还不一定能看得出来究竟是哪里出了错。
for instance:
文章图片
文章图片
what‘s wrong? ....
如今也许能一眼望穿bug,但当血色迷蒙的时候是相当有蛋碎的快感的。
以下開始集成。
先介绍用法以便爽一把
一:用法 1.打开管理控制台,找到自己创建的project http://developer.baidu.com/console#app/project
文章图片
2:选择云推送---通知:
文章图片
注:用户范围:
全部人是向全部安装这一app的用户发送通知
广播组可依据标签向特定用户发送通知
文章图片
3:手机界面:
文章图片
二:集成方法: 1.清单文件的配置 ①:加权限
< !-- Push service 执行须要的权限 -->
< uses-permission android:name="android.permission.INTERNET" />
< uses-permission android:name="android.permission.READ_PHONE_STATE" />
< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
< uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
< uses-permission android:name="android.permission.WRITE_SETTINGS" />
< uses-permission android:name="android.permission.VIBRATE" />
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
< uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
< uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
< uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
< !-- Push service 执行须要的权限 -->
②:注冊消息接收的receiver
< receiver android:name="com.zhuim.sgghealth.MyPushMessageReceiver" >
< intent-filter>
< !-- 接收push消息 -->
< action android:name="com.baidu.android.pushservice.action.MESSAGE" />
< !-- 接收bind、setTags等method的返回结果 -->
< action android:name="com.baidu.android.pushservice.action.RECEIVE" />
< !-- 可选。接受通知点击事件,和通知自己定义内容 -->
< action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
< /intent-filter>
【消息推送之百度云推送Android集成与用法】 < /receiver>
< !-- 用于接收系统消息以保证PushService正常执行 -->
< receiver
android:name="com.baidu.android.pushservice.PushServiceReceiver"
android:process=":bdservice_v1" >
< intent-filter>
< action android:name="android.intent.action.BOOT_COMPLETED" />
< action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
< action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
< action android:name="com.baidu.android.pushservice.action.media.CLICK" />
< /intent-filter>
< /receiver>
< !-- Push服务接收client发送的各种请求 -->
< !-- 注意:RegistrationReceiver 在2.1.1及之前版本号有拼写失误,为RegistratonReceiver ,用新版本号SDK时请更改为例如以下代码 -->
< receiver
android:name="com.baidu.android.pushservice.RegistrationReceiver"
android:process=":bdservice_v1" >
< intent-filter>
< action android:name="com.baidu.android.pushservice.action.METHOD" />
< action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
< /intent-filter>
< intent-filter>
< action android:name="android.intent.action.PACKAGE_REMOVED" />
< data android:scheme="package" />
< /intent-filter>
< /receiver>
< !-- Push 服务 -->
< service
android:name="com.baidu.android.pushservice.PushService"
android:exported="true"
android:process=":bdservice_v1" />
< !-- AndroidMenifest.xml添加pushservice配置 -->
2:代码文件: ①:让推送功能起作用
在自己的主Activity中增加以下代码,让推送功能開始工作:
// 以apikey的方式登录。一般放在主Activity的onCreate中
PushManager.startWork(getApplicationContext(),
PushConstants.LOGIN_TYPE_API_KEY, "bYI*********************zLi3qLk");
当中的apikey是自己project的创建时赋予的:
文章图片
②:继承FrontiaApplication类
public class MyApp extends FrontiaApplication {
public List< Activity> activitiesList;
@Override
public void onCreate() {
// TODO Auto-generated method stub
activitiesList = new ArrayList< Activity> ();
super.onCreate();
}
}
③:自己定义广播接收者:
public class MyPushMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
// 获取消息内容
String message = intent.getExtras().getString(
PushConstants.EXTRA_PUSH_MESSAGE_STRING);
} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {
// 处理绑定等方法的返回数据
// PushManager.startWork()的返回值通过PushConstants.METHOD_BIND得到
final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD);
// 方法返回错误码。若绑定返回错误(非0)。则应用将不能正常接收消息。
// 绑定失败的原因有多种,如网络原因。或access token过期。
// 请不要在出错时进行简单的startWork调用。这有可能导致死循环。
// 能够通过限制重试次数,或者在其它时机又一次调用来解决。
int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS);
String content = "";
if (intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT) != null)
content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));
// 用户在此自己定义处理消息:TODO Something
// 通知用户点击事件处理
} else if (intent.getAction().equals(
PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {
String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);
String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);
// 用户在此自己定义处理点击事件:TODO Something
}
}
}
④:导入百度云推送所须要的jar包及so文件:
libs下导入pushservice-3.2.0.jar并add to build path
libs/armeabi下导入libbdpush_V1_0.so
推荐阅读
- Android AAR的tools:replace冲突解决方案(转载)
- [转]App离线本地存储方案
- Eclipse+Maven(webapp)+Jetty+JReBel的配置方法
- Android SwipeToDismiss(左滑/右滑删除ListView条目Item)
- Android 文件操作
- Android Locale
- android中使用videoview播放视频
- 如何修复Discord麦克风不工作问题(3种最佳方法)
- 如何修复Chrome在Windows上没有正确关闭()