百度推送--搭架子
来源:互联网 发布:淘宝涛哥电玩店 编辑:程序博客网 时间:2024/04/28 02:40
准备工作
--百度开发者账号 http://developer.baidu.com/cloud/push
--接入移动应用 http://developer.baidu.com/console#app/mobile,获取API Key
--获取sdk http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/sdk/clientsdk,得到pushservice-4.1.0.jar和demo
下面开始在自己的项目中,加入百度推送代码(需要粘贴的东西上demo中找)
1、导入pushservice的jar包和你的项目需要的so包,build path
2、把项目的application继承百度的com.baidu.frontia.FrontiaApplication.分两种情况(注意:每个项目只有一个Application子类)
如果工程中已经有了Application的继承类,那么,您需要将父类改为com.baidu.frontia.FrontiaApplication,onCreate()方法一定要super.onCreate();。
如果您没有实现Application的继承类,那么,请在AndroidManifest.xml的Application标签中增加name属性:
<application android:name="com.baidu.frontia.FrontiaApplication"...
3、在mainfest中加入Push service 运行需要的权限
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在<application>标签下加入子标签,value值为接入应用获取的api key
<!-- 百度推送 -->
<meta-data android:name="api_key" android:value="88888888888888888888888888" />
4、在工程中新建baidupush包,把demo中的Utils类复制过来,该类包含这么几个工具方法
-- // 获取ApiKey,88888888888888888888888888
public static String getMetaValue(Context context, String metaKey) {}
-- // 推送服务是否已经绑定的标记,如果已经绑定,不必重复开启推送服务
public static boolean hasBind(Context context) {}
5、开启百度推送服务
分两种方式:1、使用百度账号登录后,开启推送服务。这种方式参见demo和用户手册。
2、不使用百度账号,开启推送服务。开启之后,虽然没有百度账号,但每个设备上的应用会生成userId,这样来进行推送服务,下面以此为例
在项目主框Activity(比如,MainActivity)的onCreate()方法中
if (!Utils.hasBind(getApplicationContext())) {//不使用百度登录账号体系开启百度推送服务PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,Utils.getMetaValue(MainFrameBasicActivity.this, "api_key")); // Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关 // PushManager.enableLbs(getApplicationContext());}// Push: 设置自定义的通知样式,具体API介绍见用户手册,如果想使用系统默认的可以不加这段代码 // 请在通知推送界面中,高级设置->通知栏样式->自定义样式,填写值:1, // 与下方代码中 PushManager.setNotificationBuilder(this, 1, cBuilder)中的第二个参数对应 CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder( getApplicationContext(), resource.getIdentifier( "notification_custom_builder", "layout", pkgName), resource.getIdentifier("notification_icon", "id", pkgName), resource.getIdentifier("notification_title", "id", pkgName), resource.getIdentifier("notification_text", "id", pkgName)); cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL); cBuilder.setNotificationDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); cBuilder.setStatusbarIcon(this.getApplicationInfo().icon); cBuilder.setLayoutDrawable(resource.getIdentifier( "simple_notification_icon", "drawable", pkgName)); PushManager.setNotificationBuilder(this, 1, cBuilder);
上面的PushManager.startWork();开启了推送服务,CustomPushNotificationBuilder一段代码定义了通知的样式,需要创建相应的资源文件,包括notification_custom_builder.xml和一些图片、字符串资源,参考demo创建自己的通知样式。
6、消息处理receiver
上面开启了推送服务,接下来接受后台推送的信息,并做相应处理。新建MyPushMessageReceiver继承 com.baidu.frontia.api.FrontiaPushMessageReceiver,重写其抽象方法。在mainfest中进行声明
<!-- 推送服务的客户端,即接收端 --> <receiver android:name=".MyPushMessageReceiver"> <intent-filter> <!-- 接收push消息 --> <action android:name="com.baidu.android.pushservice.action.MESSAGE" /> <!-- 接收bind,unbind,fetch,delete等反馈消息 --> <action android:name="com.baidu.android.pushservice.action.RECEIVE" /> <action android:name="com.baidu.android.pushservice.action.notification.CLICK" /> </intent-filter> </receiver>还有用百度推送必须的receviver和service声明,下面两个receiver和一个service是百度jar包里的类,声明原封不动粘上
<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> <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> <service android:name="com.baidu.android.pushservice.PushService" android:exported="true" android:process=":bdservice_v1" > <intent-filter> <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" /> </intent-filter> </service> <!-- push结束 -->
调用PushManager.startWork后,发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。如果您需要用单播推送,需要把这里获取的channel id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
---onBind(),用来处理启动服务startWork()的返回值,0是成功,绑定成功后把绑定标记置为true,Utils.setBind(context, true);
后台推送的消息分为两种,用户可见、不可见,即推送通知、推送透传
--onNotificationClicked(),用户点击通知后,执行该方法代码
--onMessage(),用户不可见,服务器透传消息过来,在此方法中进行默默处理
--onUnbind(),PushManager.stopWork() 的回调函数。解除绑定Utils.setBind(context, false);
其他方法是tag相关操作的回调。
至此,推送的架子已经搭完,之后后台推数据,只需要在receiver的相关方法中进行处理。
- 百度推送--搭架子
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- 百度推送
- iOS推送 (百度推送)
- iOS推送 (百度推送)
- 百度推送 tags 分组推送
- Android推送 百度云推送
- Android推送 百度云推送
- ios 推送消息 极光推送/百度推送
- 百度云推送!
- HDU 5040 BFS+状压
- Mini-project # 1 - Rock-paper-scissors-lizard-Spock
- flume-ng性能优化与架构设计
- ubuntu从内核源代码编译内核及替换内核
- kafka虚拟机单机开发环境搭建
- 百度推送--搭架子
- Java问题抽象和递归(母羊生母羊问题为例)
- 判断asp.net中session过期的方法
- MATLAB 对矩阵做均值运算
- Tesseract识别指定字符范围的字符
- poj 1579 Function Run Fun
- 软考之路--数据结构之线性表
- 进程与线程的区别
- Date类的一些细节