文章目录
  1. 1. 简单介绍
  2. 2. 实例

简单介绍

手机获取网络数据的方式大体分为两种,一种是拉的方式,即用户主动去获取,另一种是推的方式,即服务器推送给用户。在如今的很多APP上都会有推送的功能,有新的版本我们需要推送给用户提示更新,像微博或什么的有新的消息也需要推给用户。关于推送的几种方法这里就不介绍了可以自行搜索。这里主要介绍百度云推送的使用。本篇介绍使用百度云的网站推送给客户端,下篇介绍使用Java服务器端推送给客户端。

实例

百度云推送有给所有用户推送给某个channelid推送有个某个tag标签推送等,这里简单介绍给所有用户推送通知和推送透传信息的使用,知道基础的使用后可以参照百度云推送API来学习其他功能的使用。
首先,我们可以进入百度云推送官网了解下百度云推送http://push.baidu.com/ ,可以官方提供的SDK Demo使用看看。我们新建一个Android项目,下载好官方提供的SDK后将libs文件夹下的所有文件复制到工程下的libs文件夹中。
在AndroidManifest.xml中添加百度云推送所需要的一些权限

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Push service 运行需要的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

在AndroidManifest.xml中添加百度云推送的广播和服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!-- push service start -->
<!-- 用于接收系统消息以保证PushService正常运行 -->
<receiver
android:name="com.baidu.android.pushservice.PushServiceReceiver"
android:process=":bdservice_v1" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
<action android:name="com.baidu.android.pushservice.action.media.CLICK" />
<!-- 以下四项为可选的action声明,可大大提高service存活率和消息到达速度 -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<!-- Push服务接收客户端发送的各种请求 -->
<receiver
android:name="com.baidu.android.pushservice.RegistrationReceiver"
android:process=":bdservice_v1" >
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.METHOD" />
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />

<data android:scheme="package" />
</intent-filter>
</receiver>

<service
android:name="com.baidu.android.pushservice.PushService"
android:exported="true"
android:process=":bdservice_v1" >
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
</intent-filter>
</service>
<!-- 4.4版本新增的CommandService声明,提升小米和魅族手机上的实际推送到达率 -->
<service
android:name="com.baidu.android.pushservice.CommandService"
android:exported="true" />
<!-- push结束 -->

在主类MainActivity中Oncreate()方法里面添加如下代码,其中apiKey是自己已经配置好的apiKey

1
2
String apiKey="RG22q5hdhGeyGjFDaB05ju2X";
PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, apiKey);

自定义回调类,新建一个PushTestReceiver类继承PushMessageReceiver接口,添加未实现的方法。
在onBind方法中添加如下代码

1
2
3
4
5
6
7
8
public void onBind(Context context, int errorCode, String appid,
String userId, String channelId, String requestId) {
String responseString = "onBind errorCode=" + errorCode + " appid="
+ appid + " userId=" + userId + " channelId=" + channelId
+ " requestId=" + requestId;
Toast.makeText(context, responseString, Toast.LENGTH_LONG).show();
Log.i(TAG, "onBind\n"+responseString);
};

可以看出LogCat日志中打印出如下信息

在onNotificationArrived方法中添加如下代码

1
2
3
4
5
6
public void onNotificationArrived(Context context, String title,
String description, String customContentString) {
String responseString = "title=" +title + " description="
+ description + " customContentString=" + customContentString;
Log.i(TAG, "onNotificationArrived\n"+responseString);
}

在onNotificationClicked方法中添加如下代码

1
2
3
4
5
public void onNotificationClicked(Context context, String title,
String description, String customContentString) {
Toast.makeText(context, "点击确认了,我已经收到通知了。", Toast.LENGTH_SHORT).show();
Log.i(TAG, "onNotificationClicked\n点击收到的通知");
}

发送一条广播测试下

可以看出模拟器收到一条广播

LogCat日志中打印出如下信息

当用户点击该通知时LogCat日志中打印出如下信息

同时该应用界面显示一个Toast信息

上面是推送通知,接着测试推送透传信息,PushTestReceiver中实现message方法如下

1
2
3
4
5
public void onMessage(Context context, String message, String customContentString) {
String messageString = "透传消息 message=\"" + message
+ "\" customContentString=" + customContentString;
Log.i(TAG, messageString);
}

发送一个透传信息

LogCat日志中打印出如下信息

文章目录
  1. 1. 简单介绍
  2. 2. 实例