推送:騰迅信鴿 VS Bmob,信鴿bmob
最近幾天了解市場上主流的推送SDK。
騰迅信鴿
所需SDK,去官網自行下載。去下載

完整的清單文件如下:

![]()
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="你的包名"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="8"
9 android:targetSdkVersion="19" />
10 <!-- 【必須】 信鴿SDK所需權限 -->
11 <uses-permission android:name="android.permission.INTERNET" />
12 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
13 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
14 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
15 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
16 <uses-permission android:name="android.permission.RESTART_PACKAGES" />
17 <uses-permission android:name="android.permission.BROADCAST_STICKY" />
18 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
19 <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
20 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
21 <uses-permission android:name="android.permission.WAKE_LOCK" />
22 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
23 <uses-permission android:name="android.permission.GET_TASKS" />
24 <uses-permission android:name="android.permission.READ_LOGS" />
25 <uses-permission android:name="android.permission.VIBRATE" />
26 <!-- 【可選】 信鴿SDK所需權限 -->
27 <uses-permission android:name="android.permission.BLUETOOTH" />
28 <uses-permission android:name="android.permission.BATTERY_STATS" />
29
30 <application
31 android:allowBackup="true"
32 android:icon="@drawable/ic_launcher"
33 android:label="@string/app_name"
34 android:theme="@style/AppTheme" >
35 <activity
36 android:name="你的包名.MainActivity"
37 android:label="@string/app_name" >
38 <intent-filter>
39 <action android:name="android.intent.action.MAIN" />
40
41 <category android:name="android.intent.category.LAUNCHER" />
42 </intent-filter>
43 </activity>
44 <!-- 【必須】 信鴿receiver廣播接收 -->
45 <receiver
46 android:name="com.tencent.android.tpush.XGPushReceiver"
47 android:process=":xg_service_v2" >
48 <intent-filter android:priority="0x7fffffff" >
49
50 <!-- 【必須】 信鴿SDK的內部廣播 -->
51 <action android:name="com.tencent.android.tpush.action.SDK" />
52 <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
53 <!-- 【必須】 系統廣播:開屏和網絡切換 -->
54 <action android:name="android.intent.action.USER_PRESENT" />
55 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
56
57 <!-- 【可選】 一些常用的系統廣播,增強信鴿service的復活機會,請根據需要選擇。當然,你也可以添加APP自定義的一些廣播讓啟動service -->
58 <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
59 <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
60 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
61 </intent-filter>
62 <!-- 【可選】 usb相關的系統廣播,增強信鴿service的復活機會,請根據需要添加 -->
63 <intent-filter android:priority="0x7fffffff" >
64 <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
65 <action android:name="android.intent.action.MEDIA_REMOVED" />
66 <action android:name="android.intent.action.MEDIA_CHECKING" />
67 <action android:name="android.intent.action.MEDIA_EJECT" />
68
69 <data android:scheme="file" />
70 </intent-filter>
71 </receiver>
72
73 <!-- 【必須】 (2.30及以上版新增)展示通知的activity -->
74 <!-- 【注意】 如果被打開的activity是啟動模式為SingleTop,SingleTask或SingleInstance,請根據通知的異常自查列表第8點處理 -->
75 <activity
76 android:name="com.tencent.android.tpush.XGPushActivity"
77 android:exported="true" >
78 <intent-filter>
79
80 <!-- 若使用AndroidStudio,請設置android:name="android.intent.action" -->
81 <action android:name="" />
82 </intent-filter>
83 </activity>
84
85 <!-- 【必須】 信鴿service -->
86 <service
87 android:name="com.tencent.android.tpush.service.XGPushService"
88 android:exported="true"
89 android:persistent="true"
90 android:process=":xg_service_v2" />
91
92 <!-- 【必須】 通知service,此選項有助於提高抵達率 -->
93 <service
94 android:name="com.tencent.android.tpush.rpc.XGRemoteService"
95 android:exported="true" >
96 <intent-filter>
97 <action android:name="你的包名.PUSH_ACTION" />
98 </intent-filter>
99 </service>
100
101 <!-- 【必須】 請將YOUR_ACCESS_ID修改為APP的AccessId,“21”開頭的10位數字,中間沒空格 -->
102 <meta-data
103 android:name="XG_V2_ACCESS_ID"
104 android:value="你的ACCESS_ID" />
105 <!-- 【必須】 請將YOUR_ACCESS_KEY修改為APP的AccessKey,“A”開頭的12位字符串,中間沒空格 -->
106 <meta-data
107 android:name="XG_V2_ACCESS_KEY"
108 android:value="你的ACCESS_KEY" />
109 </application>
110
111 </manifest>
View Code
MainActivity中配置如下:

![]()
1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_main);
5 XGPushManager.registerPush(this);
6 // // 2.36(不包括)之前的版本需要調用以下2行代碼
7 // Intent service = new Intent(this, XGPushService.class);
8 // startService(service);
9 }
View Code
相當Easy吧,如果過程無誤,就可以正常推送了。
Bmob
Bmob配置過程相對信鴿來說稍微復雜一點,缺點就是需要自己在自定義Receiver裡接收推送消息,自己發送通知,但可定制性也較強。
所需SDK,去官網自行下載。去下載

完整的清單文件如下:

![]()
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="你的包名"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="8"
9 android:targetSdkVersion="19" />
10
11 <!-- BmobPush SDK權限 -->
12 <permission
13 android:name="cn.bmob.permission.push"
14 android:protectionLevel="normal" >
15 </permission>
16
17 <uses-permission android:name="cn.bmob.permission.push" /> <!-- 添加自定義的權限 -->
18 <uses-permission android:name="android.permission.READ_LOGS" />
19 <uses-permission android:name="android.permission.INTERNET" />
20 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
21 <uses-permission android:name="android.permission.WAKE_LOCK" />
22 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
23 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
24 <uses-permission android:name="android.permission.VIBRATE" />
25 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
26 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
27 <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
28
29 <application
30 android:allowBackup="true"
31 android:icon="@drawable/ic_launcher"
32 android:label="@string/app_name"
33 android:theme="@style/AppTheme" >
34 <activity
35 android:name="你的包名.MainActivity"
36 android:label="@string/app_name"
37 android:launchMode="singleTop" >
38 <intent-filter>
39 <action android:name="android.intent.action.MAIN" />
40
41 <category android:name="android.intent.category.LAUNCHER" />
42 </intent-filter>
43 </activity>
44
45 <service
46 android:name="cn.bmob.push.lib.service.PushService"
47 android:exported="true"
48 android:label="PushService"
49 android:permission="cn.bmob.permission.push"
50 android:process="cn.bmob.push" >
51 <intent-filter>
52 <action android:name="cn.bmob.push.lib.service.PushService" />
53 </intent-filter>
54 </service>
55
56 <receiver android:name="cn.bmob.push.PushReceiver" >
57 <intent-filter android:priority="2147483647" > <!-- 優先級加最高 -->
58 <!-- 系統啟動完成後會調用 -->
59 <action android:name="android.intent.action.BOOT_COMPLETED" />
60 <!-- 解鎖完成後會調用 -->
61 <action android:name="android.intent.action.USER_PRESENT" />
62 <!-- 監聽網絡連通性 -->
63 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
64 </intent-filter>
65 </receiver>
66 <!-- 第四部中創建的消息接收器,在這裡進行注冊 -->
67 <receiver android:name="你的包名.MyPushMessageReceiver" >
68 <intent-filter>
69 <action android:name="cn.bmob.push.action.MESSAGE" />
70 </intent-filter>
71 </receiver>
72 </application>
73
74 </manifest>
View Code
MainActivity中配置如下:

![]()
1 // 初始化BmobSDK
2 Bmob.initialize(this, "你的AppKey");
3 // 使用推送服務時的初始化操作
4 BmobInstallation.getCurrentInstallation(this).save();
5 // 啟動推送服務
6 BmobPush.startWork(this, "你的AppKey");
View Code
MyPushMessageReceiver完整代碼如下:

![]()
1 public class MyPushMessageReceiver extends BroadcastReceiver {
2
3 private Context mContext;
4
5 @Override
6 public void onReceive(Context context, Intent intent) {
7 mContext = context;
8 if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
9 String jsonstr = intent
10 .getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING);
11 String msg = "";
12 try {
13 JSONObject object = new JSONObject(jsonstr);
14 msg = object.getString("alert");
15 } catch (JSONException e) {
16 e.printStackTrace();
17 }
18
19 SendNotification(msg);
20 }
21 }
22
23 /**
24 * 發送通知
25 *
26 * @param message
27 */
28 @SuppressWarnings("deprecation")
29 private void SendNotification(String message) {
30 // 點擊之後執行的Intent
31 Intent intent = new Intent(mContext, MainActivity.class);
32 PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0,
33 intent, 0);
34 Notification notification = new Notification();
35 notification.icon = R.drawable.ic_launcher;
36 notification.tickerText = "收到消息推送";
37 notification.when = System.currentTimeMillis();
38 notification.defaults = Notification.DEFAULT_SOUND
39 | Notification.DEFAULT_VIBRATE;// 設置默認為系統聲音
40 notification.flags = Notification.FLAG_AUTO_CANCEL;// 點擊後自動消失
41 notification.setLatestEventInfo(mContext, "推送消息", message,
42 pendingIntent);
43 NotificationManager mManager = (NotificationManager) mContext
44 .getSystemService(Context.NOTIFICATION_SERVICE);
45 mManager.notify(1, notification);
46
47 }
48 }
View Code