基于Bmob平台的推送功能

本文介绍了如何利用Bmob平台实现安卓设备的推送功能,详细讲解了所需的权限配置、服务和接收器设置,以及核心的发送和接收推送消息的代码,帮助开发者理解和实现在应用中集成Bmob推送服务。
摘要由CSDN通过智能技术生成

因为最近项目需求用到过推送,所以研究了下基于Bmob服务的推送,下面贴出代码。下面代码主要功能在于 发布信息后,所有的安卓设备可以收到信息

原创文章,欢迎转载。转载请注明:一叶知秋的博客

地址:http://blog.csdn.net/lcm0811/article/details/46126225

权限添加,权限没有经过整理,省事全部贴过来了。

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

 <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <!-- BmobPush SDK权限 -->
    <permission
        android:name="cn.bmob.permission.push"
        android:protectionLevel="normal" >
    </permission>

 <uses-permission android:name="cn.bmob.permission.push" /> <!-- 添加自定义的权限 -->


        <service
            android:name="cn.bmob.push.lib.service.PushService"
            android:exported="true"
            android:label="PushService"
            android:permission="cn.bmob.permission.push"
            android:process="cn.bmob.push" >
            <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>
        <receiver android:name="com.shundu.wait4u.activity.MyPushMessageReceiver" >
            <intent-filter>
                <action android:name="cn.bmob.push.action.MESSAGE" />
            </intent-filter>
        </receiver>


下面贴出来的是 点击发送后,开始执行推送,使用JSON数据推送,其中android.intent.action.Tz\没有作用,我们用开关做了验证,关上开关就接受不到推送的功能,Installation中定义了一个字段pushState来接收开关的值。

@SuppressWarnings("unchecked")
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.info_ok:
                send();
                String pushJsonStr = "{\"alert\":\"你有新的消息了\",\"title\":\"新信息\",\"message\":\"金钱在向你招手!抓紧吧!先到先得\",\"website\":\"android.intent.action.Tz\"}";
                JSONObject jsonObject = null;
                try {
                    jsonObject = new JSONObject(pushJsonStr);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                
                    toastShort("进行推送");
                    // 使用推送服务时的初始化操作
                    Bmob.initialize(getActivity(), BmobConstant.APPID);
                    MyInstallation.getCurrentInstallation(getActivity()).save();
                    // 启动推送服务
                    BmobPush.startWork(getActivity(), BmobConstant.APPID);
                    // 创建推送消息的对象
                    BaseActivity.bmobPushManager = new BmobPushManager(getActivity());
                    // 创建Installation表的BmobQuery对象
                    BmobQuery<In// 创建Installation表的BmobQuery对象stallation> query = BmobInstallation.getQuery();
                    query.addWhereEqualTo("pushState", true);
                    // 并添加条件为设备类型属于android
                    query.addWhereEqualTo("deviceType", "android");
                    query.addWhereNotEqualTo("installationId", BmobInstallation.getInstallationId(getActivity()));
                    // 设置推送条件给bmobPushManager对象。
                    BaseActivity.bmobPushManager.setQuery(query);
                    // 设置推送消息,服务端会根据上面的查询条件,来进行推送这条消息
                    BaseActivity.bmobPushManager.pushMessage(jsonObject);
                
                break;


下面贴出MyPushMessageReceiver类,此类管理接收来的JSON数据,并定义推送通知的方法

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import com.shundu.wait4u.fragment.OrderFragment;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import cn.bmob.push.PushConstants;

public class MyPushMessageReceiver extends BroadcastReceiver {

    public static final int ID = 1001;
    private NotificationManager mNotification;
    private Notification notification;
    private Map<String, String> myMap;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("cn.bmob.push.action.MESSAGE")) {

            myMap = parseJson(intent.getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING));

            String alert = myMap.get("alert");
            String title = myMap.get("title");
            String message = myMap.get("message");
            String website = myMap.get("website");

            mNotification = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
            notification = new Notification();
            notification.icon = R.drawable.icon;
            notification.tickerText = alert;
            notification.when = System.currentTimeMillis();
            notification.flags = Notification.FLAG_AUTO_CANCEL;
            Intent i = new Intent(context, MainActivity.class);
            i.putExtra("website", website);
            PendingIntent pIntent = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
            notification.setLatestEventInfo(context, title, message, pIntent);
            mNotification.notify(ID, notification);
        }
    }

    /**
     * 解析推送过来的json数据
     *
     * @param json
     * @return
     */
    private Map<String, String> parseJson(String json) {
        Map<String, String> map = new HashMap<String, String>();
        try {
            JSONObject jsonObject = new JSONObject(json);
            map.put("alert", jsonObject.getString("alert"));
            map.put("title", jsonObject.getString("title"));
            map.put("message", jsonObject.getString("message"));
            map.put("website", jsonObject.getString("website"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return map;
    }

}

以上就是基本的核心代码,有问题或者发现问题的欢迎大家一起探讨,交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值