Bmob 开发 Android程序快速入门 10 消息推送

小编 2026-07-12 阅读:1693 评论:0
                             Bmob 开发 Android程序快速入门 10 消息推送     消息推送简介 推送通知是让用户及时被通知、和你的应用保持联系的一种非常棒...

                             Bmob 开发 Android程序快速入门 10 消息推送

 

 

消息推送简介

推送通知是让用户及时被通知、和你的应用保持联系的一种非常棒的方式,你可以快速而有效地通知到所有的用户,下面这个教程将会教你如何使用Bmob来推送消息。

消息推送快速入门

一、在Bmob官方网站的下载界面中,选择下载AndroidSDK,将下载的zip压缩包进行解压,得到bmobPush_(版本号).jar,然后将它放在你项目根目录下的\"libs\"目录中。

二、在您的应用程序AndroidManifest.xml文件中添加相应的权限:

<!-- BmobPush SDK权限 -->
    <permission android:protectionLevel=\"normal\" android:name=\"cn.bmob.permission.push\"></permission>
    <uses-permission android:name=\"cn.bmob.permission.push\"/><!-- 添加自定义的权限-->
    <uses-permission android:name=\"android.permission.READ_LOGS\" />
    <uses-permission android:name=\"android.permission.INTERNET\" />
    <uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />
    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />
    <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />    
    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />
    <uses-permission android:name=\"android.permission.VIBRATE\" />
    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />
    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />
    <uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\" />

 

三、在您的应用程序AndroidManifest.xml文件中注册BmobPush SDK运行所需的推送服务和消息接收器:

    <service
               android:label=\"PushService\"
            android:name=\"cn.bmob.push.lib.service.PushService\"
            android:process=\"cn.bmob.push\"
            android:permission=\"cn.bmob.permission.push\"
            android:exported=\"true\">
             <intent-filter>
                 <action android:name=\"cn.bmob.push.lib.service.PushService\"/>
             </intent-filter>
        </service>

        <receiver android:name=\"cn.bmob.push.PushReceiver\" >
            <intent-filter android:priority=\"2147483647\" ><!--优先级加最高-->
                <!-- 系统启动完成后会调用 -->
                <action android:name=\"android.intent.action.BOOT_COMPLETED\" />               
                <!-- 解锁完成后会调用 -->
                <action android:name=\"android.intent.action.USER_PRESENT\" />
                <!-- 监听网络连通性 -->
                <action android:name=\"android.net.conn.CONNECTIVITY_CHANGE\" />               
            </intent-filter>
        </receiver>

 

四、在你的应用程序中创建一个消息接收器。

Push消息通过action=cn.bmob.push.action.MESSAGE的Intent把数据发送给客户端your.package.MyPushMessageReceiver,消息格式由应用自己决定,PushService只负责把服务器下发的消息以字符串格式透传给客户端。 your.package.MyPushMessageReceiver代码示例如下:

public class MyPushMessageReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if(intent.getAction().equals(PushConstants.ACTION_MESSAGE)){
            Log.d(\"bmob\", \"客户端收到推送内容:\"+intent.getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING));
        }
    }

}

 

五、启动推送服务

在你的应用程序主Activity中调用如下方法:

    // 使用推送服务时的初始化操作
    BmobInstallation.getCurrentInstallation(this).save();
    // 启动推送服务
    BmobPush.startWork(this, \"你的AppKey\");

代码中的\"你的AppKey\"就是你在Bmob后台中创建的应用程序的AppKey,如果你不知道这是什么,可以参考快速入门文档中的注册Bmob账号部分。

 

六、在web端进行推送设置

在应用面板-->消息推送-->推送设置界面中填写包名进行保存。 \"\"

 

七、在web端推送消息

完成以上步骤后,你可以运行应用程序,从web推送一条消息给客户端。 \"\"

在后台推送消息给Android和iOS两个平台的时候,有一些需要注意的: 1、由于Android和iOS的提送机制不同,iOS要经过APNS,Android的推送完全是走Bmob的长连接服务,为兼容这个问题,如果你选择发送格式为“json”格式时,需要添加APNS兼容头部(见下面json的aps部分),推送内容格式如下:

{
    \"aps\": {
    \"sound\": \"cheering.caf\", 
    \"alert\": \"这个是通知栏上显示的内容\", 
    \"badge\": 0 
    }, 
    \"xx\" : \"json的key-value对,你可以根据情况添加更多的,客户端进行解析获取\", 
}

其中,sound是iOS接收时的声音,badge是iOS通知栏的累计消息数。

2、如果你选择发送格式为“text”时,推送内容为“推送消息测试。。。。”,Bmob会自动添加aps部分发送给APNS,,相当于自动生成如下的json格式的推送内容:

{
    \"aps\": {
        \"alert\": \"推送消息测试。。。。\", 
    }
}

同时,也会发送给Android端,相当于自动生成如下的json格式的推送内容:

{
    \"alert\" : \"推送消息测试。。。。\", 
}

3、如果只是发送给Android端,大家可以自定义json格式的数据。

4、由于iOS的APNS的推送的大小是有限制的,默认最多256bytes,因此,如果你需要跨平台互通的话,需注意推送的内容不要太长。

5、想要更多了解Bmob的推送格式的朋友,如即时聊天,可以查看我们在问答社区中的回答:http://wenda.codenow.cn//?/question/204

 

八、源码下载

为了更好的让开发者朋友正确的集成和使用Bmob推送功能,我们还提供了一个关于Bmob推送功能的简单Demo以供大家参考,有需要的朋友可以到如下地址进行源码的下载。https://github.com/bmob/bmob-android-demo-push

消息推送的视频教程和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

使用消息推送前,首先需要保存设备信息。

BmobInstallation.getCurrentInstallation(this).save();

你还可以通过定义继承自BmobInstallation的JavaBean来为BmobInstallation对象添加更多的属性,用来定制更通用的推送。

public class MyBmobInstallation extends BmobInstallation {
    private int score;

    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}

订阅频道和退订

订阅频道

订阅频道可使用 subscribe 方法

BmobInstallation installation = BmobInstallation.getCurrentInstallation(this);
installation.subscribe(\"Giants\");
installation.subscribe(\"Mets\");
installation.save();

退订频道

退订频道可使用 unsubscribe 方法

BmobInstallation installation = BmobInstallation.getCurrentInstallation(this);
installation.unsubscribe(\"Giants\");
installation.save();

广播推送消息

在客户端实现推送消息的功能,通过 BmobPushManager 对象来完成,比如给所有设备推送一条消息,如下:

BmobPushManager bmobPush = new BmobPushManager(this);
bmobPush.pushMessageAll(\"Hello Bmob.\");

组播推送消息

发送消息给订阅了Giants频道的用户

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
List<String> channels = new ArrayList<String>();
channels.add(\"Giants\");

query.addWhereEqualTo(\"channels\", channels);
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

同时发送消息给多个频道时,可以将其他频道添加在channels中。

多播推送消息

推送给不活跃的用户

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereLessThan(\"updatedAt\", new BmobDate(new Date()));
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

根据查询条件做推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo(\"score\", 80);
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

请注意,where 条件查询的都是 installations 表。这里是假设 installations 表存储了 score 的Number属性,你可以像查询普通对象一样构造where查询

根据平台做推送

给Android平台的终端推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo(\"deviceType\", \"android\");
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

给IOS平台的终端推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo(\"deviceType\", \"ios\");
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

根据地理位置信息做推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereWithinRadians(\"location\", new BmobGeoPoint(112.934755, 24.52065), 1.0);
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

上面的例子假设 installation 表中有个 location 属性是 GeoPoint 类型,我们就可以根据地理信息位置做推送。

点播推送消息

发送给Android单个客户端

String installationId = \"客户端installationId\";
BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo(\"installationId\", installationId);
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

发送给iOS单个客户端

String deviceToken = \"客户端deviceToken\";
BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo(\"deviceToken\", deviceToken);
bmobPush.setQuery(query);
bmobPush.pushMessage(\"消息内容\");

 

希望对你有帮助。

 

 

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表