Bmob推送之手动推送的实现

3 篇文章 0 订阅
2 篇文章 0 订阅

最近打算在项目中用到推送实现相关功能模块,于是这两天看各种推送平台的文档和demo,先是用了极光试了试,遇到了问题,调了好久,可能我是新手的原因,极光感觉用起来太新潮高端,于是,只能换了Bmob,还好,bmob因为之前在它上面用过其它数据模块的原因,用起来理解起来都好很多。由于Bmob开发文档没有关于手动推送的教程,我便自己摸索起来,最后终于搞好了,接下来就可以在实际项目中集成啦。我们先从最基本的控制台推送开始,然后尝试手机客户端手动推送。

1.第一步,无疑是导Bmob包:

注意点:最好要将下载下来的bmob的sdk文件中的libs包都导入,防止出现相关错误


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

比较简单,这里直接贴代码了:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test.bmobpushtest" >
    <!--BmobSDK所需的权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--推送所需的权限-->
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service
            android:label="PushService"
            android:name="cn.bmob.push.lib.service.PushService"
            android:process=":bmobpush"
            android:exported="true">
            <intent-filter>
                <action android:name="cn.bmob.push.lib.service.PushService"/>
            </intent-filter>
        </service>

        <!-- 用于进程保活 -->
        <service
            android:name="cn.bmob.push.lib.service.PushNotifyService"
            android:process=":bmobpush" >
        </service>

        <receiver android:name="cn.bmob.push.PushReceiver" >
            <intent-filter>
                <!-- 系统启动完成后会调用 -->
                <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>
        <!-- 接收心跳和唤醒的广播,要和PushService运行在同个进程 -->
        <receiver
            android:name="cn.bmob.push.PushNotifyReceiver"
            android:process=":bmobpush" >
            <intent-filter>
                <!-- 接收心跳广播的action -->
                <action android:name="cn.bmob.push.action.HEARTBEAT" />
                <!-- 接收唤醒广播的action -->
                <action android:name="cn.bmob.push.action.NOTIFY" />
            </intent-filter>
        </receiver>
        <!-- 第四部中创建的消息接收器,在这里进行注册 -->
        <receiver android:name="test.bmobpushtest.MyPush">
            <intent-filter >
                <action android:name="cn.bmob.push.action.MESSAGE"/>
            </intent-filter>
        </receiver>


    </application>
</manifest>

注意:如果你要接收到推送信息,并将其以Notification的形式展示的话,需要创建一个自己的BroadcastReceiver,先在Manifest中注册一下,即上面的第四步

3.接下来就创建一个自己的BroadcastReceiver类MyPush

代码如下:

/**
 * Created by MuFeng on 2017/3/28.
 */

public class MyPush extends BroadcastReceiver{
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if(intent.getAction().equals(PushConstants.ACTION_MESSAGE)){
            //收到消息进行一些处理:发送一个通知
            String jsonStr = intent.getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING);
            String content = null;
            //处理Json的数据,将其转化为正常string类型
            try {
                JSONObject jsonObject=new JSONObject(jsonStr);
                content=jsonObject.getString("alert");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            NotificationManager manager= (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
            Notification notification= new Notification.Builder(context).
                    setSmallIcon(R.mipmap.ic_launcher).//设置推送消息的图标
                    setContentTitle("您收到一条推送信息!") .//设置推送标题
                    setContentText(content).build();//设置推送内容
            manager.notify(1,notification);//设置通知栏
            Log.d("bmob", "客户端收到推送内容:"+intent.getStringExtra("msg"));
        }
    }

}
这里需要注意的是:通过intent.getStringExtra()接收前面推送内容,得到的是Json的格式,我们需要将json格式String数据转化为我们熟悉的String类型,然后自己在写个Notification通知栏来显示推送的数据。

4.接下来就剩下MainActivity这个活动了:

public class MainActivity extends AppCompatActivity {
    BmobPushManager manager=new BmobPushManager();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化BmobSDK
        Bmob.initialize(this, "12f8d65c69d28954b6c875aafbc0aaaa");
        setContentView(R.layout.activity_main);
        // 使用推送服务时的初始化操作
        BmobInstallation.getCurrentInstallation().save();
        // 启动推送服务
        BmobPush.startWork(this);
       
}
将app id替换成自己控制端的app id即可,bmob上面有教程,这里就不多说了,我们先在控制端的推送模块输入:“这是第一条推送消息,哈哈!”来点击推送运行一下看看简单效果吧:


看吧,控制端推送的基本功能实现了,接下来看看怎么样在客户端手动推送吧。

5.我们在布局里放一个按钮,布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="test.bmobpushtest.MainActivity">

    <Button
        android:id="@+id/open_myself"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:layout_margin="16dp"
        android:text="手动开启推送" />
</LinearLayout>
就只有一个按钮,来通过点击实现手动推送。

6.增加MainActivity里面手动推送的功能代码:

我们写一个自己的方法pushMessage()来实现手动推送,如何实现呢?Bmob已经为我们提供了回调接口PushListener,让我们看看如何实现吧:

private void pushMessage(String message){
    manager.pushMessageAll(message, new PushListener() {
        @Override
        public void done(BmobException e) {
            if(e==null){
                Log.d("BmobPush","推送成功!");
            }else{
                //loge(e);
            }
        }
    });
}
通过调用BmobPushManager对象的pushMessageAll()方法实现手动推送,第一个参数是要推送的内容,第二个放入回调监听器PushListener

接下来让我们在按钮的点击事件中添加该功能代码看看效果吧:

button= (Button) findViewById(R.id.open_myself);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //手动开启推送请求

        // 推送一条消息给所有安装此应用的设备
        pushMessage("手动推送消息给所有用户!");

    }
});
我们推送内容为:“手动推送消息给所有用户!”运行一下:


没问题,让我们点击一下按钮看看效果:


看,真的实现了,接下来我们就可以将其封装到自己的项目中,自己可以慢慢摸索用法,实现更多功能。

补充:本文仅作记录和供大家参考,不足和需要改进之处请大家提出来,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值