消息推送简介 - 图1 - 文档首页
-
- 数据服务
- Android SDK
- iOS SDK
- 小程序
- Cocos2D-X
- C# SDK
- GO
- JavaScript
- PHP
- RESTful
-
- 云函数
- Android SDK
- iOS SDK
- Java 云函数
- JavaScript
- C#
- PHP
- RESTful
- Web
-
- 支付服务
- Android SDK
- iOS SDK
- RESTful
-
- 短信服务
- Android SDK
- iOS SDK
- JavaScript
- PHP
- RESTful
-
- IM服务
- Android SDK
- iOS SDK
-
- 推送服务
- Android SDK
- iOS SDK
- JavaScript
- PHP
- RESTful
-
- 其他
- 常见问题
- 错误码
- 数据安全
- BQL
- 知识库
- 下载
- 搜索
Android SDK - 开发文档
- 消息推送简介
- 消息推送快速入门
- 消息推送的视频教程和Demo
- 其他相关说明
- 安装消息推送服务
- 订阅频道和退订
- 广播推送消息
- 组播推送消息
- 多播推送消息
- 点播推送消息
## 消息推送简介 推送通知是让用户及时被通知、和你的应用保持联系的一种非常棒的方式,你可以快速而有效地通知到所有的用户,下面这个教程将会教你如何使用Bmob来推送消息。 ## 消息推送快速入门 一、在Bmob官方网站的下载界面中,选择下载Android推送SDK,将下载的zip压缩包进行解压,得到Bmob_Push_v(版本号)_日期.jar,然后将它放在你项目根目录下的"libs"目录中。 二、在您的应用程序AndroidManifest.xml文件中添加相应的权限:
  1. <!—BmobSDK所需的权限 —>
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  5. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  6. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  7. <!—推送所需的权限—>
  8. <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
  9. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
三、在您的应用程序AndroidManifest.xml文件中注册BmobPush SDK运行所需的推送服务和消息接收器:
  1. <service
  2. android:label="PushService"
  3. android:name="cn.bmob.push.lib.service.PushService"
  4. android:process=":bmobpush"
  5. android:exported="true">
  6. <intent-filter>
  7. <action android:name="cn.bmob.push.lib.service.PushService"/>
  8. </intent-filter>
  9. </service>
  10. <!— 用于进程保活 —>
  11. <service
  12. android:name="cn.bmob.push.lib.service.PushNotifyService"
  13. android:process=":bmobpush" >
  14. </service>
  15. <receiver android:name="cn.bmob.push.PushReceiver" >
  16. <intent-filter>
  17. <!— 系统启动完成后会调用 —>
  18. <action android:name="android.intent.action.BOOT_COMPLETED" />
    <!— 解锁完成后会调用 —>
  19. <action android:name="android.intent.action.USER_PRESENT" />
  20. <!— 监听网络连通性 —>
  21. <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
  22. </receiver>
  23. <!— 第四部中创建的消息接收器,在这里进行注册 —>
  24. <receiver android:name="your.package.MyPushMessageReceiver">
  25. <intent-filter >
  26. <action android:name="cn.bmob.push.action.MESSAGE"/>
  27. </intent-filter>
  28. </receiver>
  29. <!— 接收心跳和唤醒的广播,要和PushService运行在同个进程 —>
  30. <receiver
  31. android:name="cn.bmob.push.PushNotifyReceiver"
  32. android:process=":bmobpush" >
  33. <intent-filter>
  34. <!— 接收心跳广播的action —>
  35. <action android:name="cn.bmob.push.action.HEARTBEAT" />
  36. <!— 接收唤醒广播的action —>
  37. <action android:name="cn.bmob.push.action.NOTIFY" />
  38. </intent-filter>
  39. </receiver>
四、在你的应用程序中创建一个消息接收器。 Push消息通过action=cn.bmob.push.action.MESSAGE的Intent把数据发送给客户端your.package.MyPushMessageReceiver,消息格式由应用自己决定,PushService只负责把服务器下发的消息以字符串格式透传给客户端。 your.package.MyPushMessageReceiver的代码示例如下:
  1. public class MyPushMessageReceiver extends BroadcastReceiver{
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. // TODO Auto-generated method stub
  5. if(intent.getAction().equals(PushConstants.ACTION_MESSAGE)){
  6. Log.d("bmob", "客户端收到推送内容:"+intent.getStringExtra("msg"));
  7. }
  8. }
  9. }
五、启动推送服务 在你的应用程序主Activity中调用如下方法:
  1. // 初始化BmobSDK
  2. Bmob.initialize(this, "你的AppKey");
  3. // 使用推送服务时的初始化操作
  4. BmobInstallation.getCurrentInstallation().save();
  5. // 启动推送服务
  6. BmobPush.startWork(this);
代码中的"你的Application Id"就是你在Bmob后台中创建的应用程序的Application Id,如果你不知道这是什么,可以参考快速入门文档中的注册Bmob账号部分。 六、在web端进行推送设置 在应用面板—>消息推送—>推送设置界面中填写包名进行保存。 消息推送简介 - 图2 七、在web端推送消息 完成以上步骤后,你可以运行应用程序,从web推送一条消息给客户端。 消息推送简介 - 图3 在后台推送消息给Android和iOS两个平台的时候,有一些需要注意的: 1、由于Android和iOS的提送机制不同,iOS要经过APNS,Android的推送完全是走Bmob的长连接服务,为兼容这个问题,如果你选择发送格式为“json”格式时,需要添加APNS兼容头部(见下面json的aps部分),推送内容格式如下:
  1. {
  2. "aps": {
  3. "sound": "cheering.caf",
  4. "alert": "这个是通知栏上显示的内容",
  5. "badge": 0
  6. },
  7. "xx" : "json的key-value对,你可以根据情况添加更多的,客户端进行解析获取",
  8. }
其中,sound是iOS接收时的声音,badge是iOS通知栏的累计消息数。 2、如果你选择发送格式为“text”时,推送内容为“推送消息测试。。。。”,Bmob会自动添加aps部分发送给APNS,,相当于自动生成如下的json格式的推送内容:
  1. {
  2. "aps": {
  3. "alert": "推送消息测试。。。。",
  4. }
  5. }
同时,也会发送给Android端,相当于自动生成如下的json格式的推送内容:
  1. {
  2. "alert" : "推送消息测试。。。。",
  3. }
3、如果只是发送给Android端,大家可以自定义json格式的数据。 4、由于iOS的APNS的推送的大小是有限制的,默认最多256bytes,因此,如果你需要跨平台互通的话,需注意推送的内容不要太长。 5、想要更多了解Bmob的推送格式的朋友,如即时聊天,可以查看我们在问答社区中的回答:http://wenda.bmob.cn//?/question/204 八、源码下载 为了更好的让开发者朋友正确的集成和使用Bmob推送功能,我们还提供了一个关于Bmob推送功能的简单Demo以供大家参考,有需要的朋友可以到如下地址进行源码的下载。https://github.com/bmob/bmob-android-demo-push, 0.9版本或以上的Demo ## 消息推送的视频教程和Demo Bmob官方为大家准备了消息推送的视频教程,有需要的朋友可以移步浏览视频教程: 客户端推送消息:http://v.youku.com/v_show/id_XNzQ4ODczOTc2.html 集成BmobPushSDK:http://v.youku.com/v_show/id_XNzQ4ODczOTc2.html ## 其他相关说明 以上文档仅仅介绍了如何实现消息的一次性推送,如果你还需要用到其他的推送方法,如组播、广播等,还需要详细阅读下面的相关知识。 ### 安装消息推送服务 每一个Bmob的App被安装在用户的设备上后,如果要使用消息推送功能,Bmob SDK会自动生成一个Installation对象。Installation对象包含了推送所需要的所有信息。举例:一个棒球的App,你可以让用户订阅感兴趣的棒球队,然后及时将这个球队的消息推送给用户 。 您可以使用 BmobSDK,通过 BmobInstallation 对象进行一系列操作,就像你存储和获取其他的普通对象一样,比如BmobObject对象。 BmobInstallation对象有几个系统默认的特殊字段来帮助你进行设备定位等管理: - channels : 当前这个设备订阅的渠道名称数组 - timeZone : 设备所在位置的时区, 如Asia/Shanghai,这个会在每个BmobInstallation对象更新时同步(只读) - deviceType : 设备的的类型, 值为:"ios" 或 "android" (只读) - installationId : Bmob使用的设备唯一号 (只读) #### 保存 installation 使用消息推送前,首先需要保存设备信息。
  1. BmobInstallation.getCurrentInstallation().save();
#### 自定义Installation表 开发者如果想要为设备信息表增加其他属性,则可以通过继承BmobInstallation类的方式来完成,用来定制更通用的推送。 举例:
  1. public class MyBmobInstallation extends BmobInstallation {
  2. /*
  3. 用户id-这样可以将设备与用户之间进行绑定
  4. */
    private String uid;
  5. public MyBmobInstallation(Context context) {
  6. super(context);
  7. }
  8. public String getUid() {
  9. return uid;
  10. }
  11. public void setUid(String uid) {
  12. this.uid = uid;
  13. }
  14. }
那么如何更新增加的uid字段的值呢? 具体思路:先将当前设备查询出来,之后调用update方法更新该值 示例如下:
  1. BmobQuery<MyBmobInstallation> query = new BmobQuery<MyBmobInstallation>();
  2. query.addWhereEqualTo("installationId", BmobInstallation.getInstallationId(this));
  3. query.findObjects(this, new FindListener<MyBmobInstallation>() {
  4. @Override
  5. public void onSuccess(List<MyBmobInstallation> object) {
  6. // TODO Auto-generated method stub
  7. if(object.size() > 0){
  8. MyBmobInstallation mbi = object.get(0);
  9. mbi.setUid("用户id");
  10. mbi.update(context,new UpdateListener() {
  11. @Override
  12. public void onSuccess() {
  13. // TODO Auto-generated method stub
  14. Log.i("bmob","设备信息更新成功");
  15. }
  16. @Override
  17. public void onFailure(int code, String msg) {
  18. // TODO Auto-generated method stub
  19. Log.i("bmob","设备信息更新失败:"+msg);
  20. }
  21. });
  22. }else{
  23. }
  24. }
  25. @Override
  26. public void onError(int code, String msg) {
  27. // TODO Auto-generated method stub
  28. }
  29. });
注: 不能调用save方法保存,因为之前调用BmobInstallation.getCurrentInstallation(this).save()方法已经将该设备信息保存到设备表中。 ### 订阅频道和退订 #### 订阅频道 订阅频道可使用 subscribe 方法
  1. BmobInstallation installation = BmobInstallation.getCurrentInstallation();
  2. installation.subscribe("Giants");
  3. installation.subscribe("Mets");
  4. installation.save();
注:V3.4.3版本的Bmob SDK对频道订阅增加去重操作,也就是说:即使你调用subscribe方法订阅了多个相同的频道,Bmob只会记录一个频道。 #### 退订频道 退订频道可使用 unsubscribe 方法
  1. BmobInstallation installation = BmobInstallation.getCurrentInstallation();
  2. installation.unsubscribe("Giants");
  3. installation.save();
### 广播推送消息 在客户端实现推送消息的功能,通过 BmobPushManager 对象来完成,比如给所有设备推送一条消息,如下:
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. bmobPush.pushMessageAll("Hello Bmob.");
### 组播推送消息 发送消息给订阅了Giants频道的用户
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. List<String> channels = new ArrayList<String>();
  4. channels.add("Giants");
  5. query.addWhereEqualTo("channels", channels);
  6. bmobPush.setQuery(query);
  7. bmobPush.pushMessage("消息内容");
同时发送消息给多个频道时,可以将其他频道添加在channels中。 ### 多播推送消息 #### 推送给不活跃的用户
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. query.addWhereLessThan("updatedAt", new BmobDate(new Date()));
  4. bmobPush.setQuery(query);
  5. bmobPush.pushMessage("消息内容");
#### 根据查询条件做推送
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. query.addWhereEqualTo("score", 80);
  4. bmobPush.setQuery(query);
  5. bmobPush.pushMessage("消息内容");
请注意,where 条件查询的都是 installations 表。这里是假设 installations 表存储了 score 的Number属性,你可以像查询普通对象一样构造where查询 #### 根据平台做推送 给Android平台的终端推送
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. query.addWhereEqualTo("deviceType", "android");
  4. bmobPush.setQuery(query);
  5. bmobPush.pushMessage("消息内容");
给IOS平台的终端推送
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. query.addWhereEqualTo("deviceType", "ios");
  4. bmobPush.setQuery(query);
  5. bmobPush.pushMessage("消息内容");
#### 根据地理位置信息做推送
  1. BmobPushManager bmobPush = new BmobPushManager();
  2. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  3. query.addWhereWithinRadians("location", new BmobGeoPoint(112.934755, 24.52065), 1.0);
  4. bmobPush.setQuery(query);
  5. bmobPush.pushMessage("消息内容");
上面的例子假设 installation 表中有个 location 属性是 GeoPoint 类型,我们就可以根据地理信息位置做推送。 ### 点播推送消息 发送给Android单个客户端
  1. String installationId = "客户端installationId";
  2. BmobPushManager bmobPush = new BmobPushManager();
  3. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  4. query.addWhereEqualTo("installationId", installationId);
  5. bmobPush.setQuery(query);
  6. bmobPush.pushMessage("消息内容");
发送给iOS单个客户端
  1. String deviceToken = "客户端deviceToken";
  2. BmobPushManager bmobPush = new BmobPushManager();
  3. BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
  4. query.addWhereEqualTo("deviceToken", deviceToken);
  5. bmobPush.setQuery(query);
  6. bmobPush.pushMessage("消息内容");
Copyright © 2017 Bmob, Maintained by the Bmob Support.

搜索

请输入您要搜索的内容

Keyboard Shortcuts

Keys Action
? Open this help
Previous page
Next page
s Search

[返回

旧版](https://docs.bmob.cn/data/Android/a_faststart/doc/index.html)