最近几天了解市场上主流的推送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