Android 百度推送使用总结
在上班工作中的一个项目中使用到了百度推送,以前对推送一无了解,现将百度推送学习总结分享如下。
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.BROADCAST_STICKY" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.VIBRATE" /><!-- for log. --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/><uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><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" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2、客户端实现自己的Receiver(继承自BroadcastReceiver),用于处理当接收到推送消息时的处理响应事件。
<! -- push service client --> <receiver android:name="your.package.PushMessageReceiver"> <intent-filter> <! -- 接收 push 消息 --> <action android:name="com.baidu.android.pushservice.action.MESSAGE" /> <! -- 接收 bind、setTags 等 method 的返回结果 --> <action android:name="com.baidu.android.pushservice.action.RECEIVE" /> <! -- 可选。如果不声明,用户点击通知后,默认打开应用,如果在应用中进行了申明,点击通知消息时不会打开应用,应该在自己写的Receiver类里进行处理,如打开某个Activity,同时Receiver会接收到用户点击行为的intent,并获取通知的标题,内容或自定义内容等--> <action android:name=" com.baidu.android.pushservice.action.notification.CLICK” /> </intent-filter> </receiver>
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); }
3、配置PushService服务
<! -- push service start --> <! -- 用于接收系统消息以保证 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 服务接收客户端发送的各种请求--> <receiver android:name="com.baidu.android.pushservice.RegistratonReceiver" 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"/> <! -- push service end -->
4、调用API
>>1. 在主 Activiy 的 OnCreate 方法中,调用接口 startWork,其中 loginValue 是百度账户的accessToken 或者是 ApiKey,由 loginType 决定。
PushManager.startWork(context, loginType, loginValue)
功能:完成 Push 服务的初始化, 并且完成自动 bind 工作
参数
context:当前执行 Context
loginType:String 绑定认证方式——无账号认证方式用 PushConstants.LOGIN_TYPE_API_KEY ;百度 Auth2.0 认证方式用
PushConstants.LOGIN_TYPE_ACCESS_TOKEN
loginValue: 和 loginType 对应,分别是应用的 API KEY,或者百度 Auth2.0 Access Token
>>2. 自定义通知样式(可选)
通知样式定制, 改变 Notification 里的铃声、震动、显示与消失行为,并定制通知栏的 layout、图标、标题、内容、状态栏图标等。
CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder(layoutId, layoutIconId, layoutTitleId, layoutTextId ); cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL); cBuilder.setNotificationDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); cBuilder.setStatusbarIcon( statusbarIconId); cBuilder.setLayoutDrawable( notificationIconId); PushManager.setNotificationBuilder(this, notificationId, cBuilder);
>>3.客户端程序需要自己实现一个 BroadcastReceiver 来接收 Push 消息和接口回调
public class PushMessageReceiver extends BroadcastReceiver {public static final String TAG = PushMessageReceiver.class.getSimpleName(); @Overridepublic void onReceive(final Context context, Intent intent) {if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {// 处理push消息String message = intent.getExtras().getString(PushConstants.EXTRA_PUSH_MESSAGE_STRING); Intent responseIntent = null;responseIntent = new Intent(PushDemoActivity.ACTION_MESSAGE);responseIntent.putExtra(PushDemoActivity.EXTRA_MESSAGE, message);responseIntent.setClass(context, PushDemoActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent); } else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {// 处理bind、setTags 等方法口的返回数据 final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD); final int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS); final String content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));Intent responseIntent = null;responseIntent = new Intent(PushDemoActivity.ACTION_RESPONSE);responseIntent.putExtra(PushDemoActivity.RESPONSE_METHOD, method);responseIntent.putExtra(PushDemoActivity.RESPONSE_ERRCODE, errorCode);responseIntent.putExtra(PushDemoActivity.RESPONSE_CONTENT, content);responseIntent.setClass(context, PushDemoActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent);} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {// 处理用户点击通知消息时响应事件Intent aIntent = new Intent();aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);aIntent.setClass(context, CustomActivity.class);String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_TITLE, title);String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT, content);context.startActivity(aIntent);}} }
5、常用的类和API
>>1.常用的类:
Class | 描述 |
PushManager | PushManager 提供了所有使用 Push 服务的静态方法 |
CustomPushNotificationBuilder |
提供了改变 Notification 里的铃声、 |
PushSettings | PushSettings 提供了端上 Push 服务的配置静态方法 |
>>2.API
method | detail | class.api |
Push 服务接口 | 提供 Push 服务 | startWork |
Tag 管理接口 | Tag 的创建与删除 | setTags(Context,List<String>),delTags(...) |
通知管理接口 | 自定义通知样式 |
CustomPushNotificationBuilder, setNotificationFlags, |
推送效果反馈 | 反馈推送通知的效果 | activityStarted, activityStoped |
设置接口 | Push 服务设置 | enableDebugMode |
转载于:https://www.cnblogs.com/a284628487/archive/2013/06/12/3132829.html
Android 百度推送使用总结相关推荐
- Android 百度推送服务
1.资源链接 百度官方文档:http://push.baidu.com/doc/android/api: 百度推送SDK下载:http://push.baidu.com/sdk/push_client ...
- 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送
写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...
- Android 消息推送
Android 消息推送 那位大哥做过啊 android是用服务做吧? pushsharp 雲推送 你要有服務器來服務 不是云推送吧 去搜這個,有server,有client,有demo 自己做的话, ...
- android 统一推送平台,工信部实验室成立安卓统一推送联盟:推送服务将实现统一...
据微信公众号" 泰尔终端实验室"7月19日消息,移动互联网时代,消息推送是移动应用(APP)的一项重要功能,目前中国安卓系统生态环境尚不成熟,设备碎片化现象严重,导致不同应用与操作 ...
- (4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送
前言(常见坑): 小心是AndroidManifest文件被别人改动过...... 升级推送SDK时往往可能会引入新问题.....除非有重大更新,否则可以延迟2个版本进行升级 为了更好应对出问题的用户 ...
- Android消息推送叨逼叨
最近在搞即时消息推送.了解了推送服务实现的基本原理.通过长连接去实现及时的推送,或者通过轮询的方式去实现伪及时的推送.当然,通常我们选择前者.如果实现长连接就要用到socket,所以简单了解了下soc ...
- Android消息推送 解决方案
前言 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传.资讯类产品进行新闻推送等等 推送消息截图 今天,我将全面介绍Android中实现消息推送的7种主流解 ...
- Android 消息推送OnePush
Android 消息推送 1.实现原理 1.消息推送的实质 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户 推送的消息一般是用户需要的或app希望用户知道的消息 ...
- 【android极光推送】—从客户端到后台,一文通吃
前记 推送原理浅析 平台说明 概念解释 推送的三种实现方式 客户端直接向推送服务方发送Http请求 项目服务器通过Http转发推送请求至推送服务方 项目服务端使用SDK进行功能集成 关于推送的种类概述 ...
最新文章
- 解决arXiv上传LaTeXpaper的坑
- .Net中的设计模式——Iterator模式
- Vue通过eventBut实现组件全局通信
- Open XML应用安全(2)OLE机制
- 用Python实现快速排序
- 化验室计算机系统验证风险评估,计算机化系统验证风险评估报告.doc
- 线程的3种实现方式并深入源码简单分析实现原理
- Android 仿QQ消息界面
- python应聘的职位_Python学到哪种程度可以去应聘相关的职位了?
- 20130331java语言基础学习笔记-语句_breakcontinue
- 在Python27中运行pip install dlib装载库dlib所引起的问题解决
- 电子商务网站的购物流程设计(简述)
- 计算机专业英语缩略词
- 0到1认识计算机:通俗讲解计算机工作原理
- 285个地级市的灯光数据(1992-2013年)和雾霾(PM2.5)数据(1998-2016年)
- FaceBook到底验证个啥?
- 各大瀑布流简析与建议
- 低代码学习教程:如何编辑自定义打印模版?
- 使用regexp_extract、regexp_replace函数过滤特殊字符时,不同的执行情境下(hive -e;hive -f),正则表达式的内容有变化
- pytorch Cosine Annealing LR
热门文章
- ios nstimer实现延时_iOS中定时器NSTimer的使用
- Mybatis多表模型
- 怎么做手机的上下滑动_diy滴胶手机壳到底怎么做呢?
- testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
- 鸿蒙第一款手机,拿下“国内第一手机商”的OPPO,打算弃用华为鸿蒙?
- python的def语句_【零基础学Python】def语句,参数和None值
- setid android,android-如何将setId()用于imageView
- python spark hadoop_使用Scala或Python列出存储在Hadoop HDFS上的Spark群集中可用的所有文件?...
- Centos7 重启网卡
- 为什么现在好多年轻人连1万都掏不出来,却觉得100万很少?