最近做了个app的推送用到了极光的推送简单的梳理了下,琢磨了一下以下纯属猜想,我们在极光上面注册应用后会生成我们app的appkey和密码,用来唯一标示我们的应用,app端导入sdk后,当用户登入会给该用户绑定上别名或者分组,当通过调用他们的接口相当于把这些信息组成的数据存放到数据库中,当服务器端通过接口推送消息时,会检索该应用下所属组或者是别名的用户,要是存在极光端的服务器便会给登入中的用户推送消息。。呵呵纯属虚构
以下内容借用 “APP开发推送实现分组发送和服务端集成(杰瑞教育原创).docx”
一、注册应用
创建应用项目的基础包,单击创建,产生应用信息如图所示:
产生AppKey和API主密码,每个客户端应用使用唯一一个AppKey
二、app端环境搭建
1.SDK下载
官网资源地址: https://www.jpush.cn/downloads/sdk/android/ 下载 JPUSH Android – SDK。
2.导入SDK开发包
· 复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下
· 复制 libs/armeabi/libjpush.so 到工程 libs/armeabi 目录下
3.配置AndroidManifest.xml
详细请参照官网http://docs.jpush.io/guideline/android_guide/#sdk文档中说明进行配置
4.测试是否成功
集成完成后,JPush 提供的推送服务是默认就已经开启,这时客户端就可以接收到来自服务的消息了,可通过登录到JPush用户平台,发送通知测试集成是否成功如图所示:
5.实现指定人群推送消息
这里主要是通过极光的接口来实现,单个用户用别名(alias )、分组(tags)调用JPushInterface方法:
setAlias、setTags、以及同时设置别名和分组setAliasAndTags
以用户名为例:HashSet set = new HashSet<String>();
String name = userPreferenceDao.getName();
set.add(name);
//用户绑定服务
JPushInterface.setTags(this, set, this);
用户登入APP时,获取该用户的Name,然后把用户名当做别名调用极光的JPushInterface.setTags() ,这样就可以给指定用户名推送消息了,
三、开发消息推送服务端
1.下载服务端SDK
下载地址: http://docs.jpush.cn/download/attachments/2228302/jpush-client-3.2.3.zip?version=2&modificationDate=1415166491000
2.在项目中加入jar包
1.创建JPushClient
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);
参数说明:
masterSecret:注册应用的主密码,即API 主密码
appKey:注册应用的应用Key
maxRetryTime:最大的尝试次数,设为3表示:跟服务器进行建立连接若失败会尝试再进行两次尝试
2. 构建一个PushPayload对象(推送对象)
确定推送消息的目标,包括推送的平台(Android、IOS)、消息内容和目标(所有人、别名、标签),构建简单的推送对象:向所有平台,所有人,推送内容为 content 的通知。
public static PushPayload buildPushObject_all_all_alert(String content) {
return PushPayload.alertAll(content);
构建推送对象:所有平台,推送目标是别名为alias,通知内容为 content。
public static PushPayload buildPushObject_all_alias_alert(String alias,String content) {
return PushPayload.newBuilder()
.setPlatform(Platform.all())//所有平台
.setAudience(Audience.alias(alias))//向选定的人推送
.setNotification(Notification.alert(content))//消息内容
.build();}
构建推送对象:向android平台,向目标标签tag,通知标题title,内容为 content。
public static PushPayload buildPushObject_android_tag_alertWithTitle (String alias,String title,String content) {
return PushPayload.newBuilder().setPlatform(Platform.android())
.setAudience(Audience.tag(tag))//向指定的组推送
.setNotification(Notification.android(message, title, null)).build();
}
3.推送消息
PushResult result=jpushClient.sendPush(payload);
应用客户推送消息
参数:payload 即第二步创建的推送对象
返回值:PushResult 表示服务端推送结果
包含下列数据:
msg_id:返回推送消息的id