上一篇文章讲述了极光推送的 jcenter 自动集成,简单快捷,本篇简单介绍一下极光推送API在实际项目中的经常使用的一些方法。
JPushInterface.setDebugMode(isDebug);
在自定义的Application中onCreate中调用,用于debug调试,正式环境不用调用。
JPushInterface.init(this);
同调试模式一样,在Application中onCreate中调用,对JPush 推送服务进行初始化。
许多应用为了良好的用户体验,将是否接受推送服务的权限开放给用户,让用户自定义是否接收推送通知,这种情况就会用到推送的停止和恢复。
注:本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。如果停止推送服务后,开发者App被卸载重新安装,JPush SDK 会恢复正常的默认行为。本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
//停止推送服务
JPushInterface.stopPush(this);
//恢复推送服务
JPushInterface.resumePush(this);
//检查推送服务是否已经被停止
JPushInterface.isPushStopped(this);
简单来说,这两者是为了区分用户以便对单个或部分用户单独推送消息使用。每个用户只能有一个别名,但可以有多个标签,在项目中不同的用户设置不同的别名,这样可以根据别名来确定唯一用户。
//设置别名
JPushInterface.setAlias(context,sequence,alias);
//删除别名
JPushInterface.deleteAlias(context,sequence);
//查询别名
JPushInterface.getAlias(context,sequence);
//设置标签
JPushInterface.setTags(context,sequence,tags);
//新增标签
JPushInterface.addTags(context,sequence,tags);
//删除标签
JPushInterface.deleteTags(context,sequence,tags);
//清楚所有标签cleanTags
JPushInterface.cleanTags(context,sequence);
//查询所有标签
JPushInterface.getAllTags(context,sequence);
在官方提供的Demo中我们会发现,配置文件中多了一个 用户自定义接收消息器 的 MyJPushMessageReceiver
,这个Receiver就是用于接收 别名和标签 的相关操作回调使用
package com.example.jpushdemo;
import android.content.Context;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.service.JPushMessageReceiver;
/**
* 自定义JPush message 接收器,包括操作tag/alias的结果返回(仅仅包含tag/alias新接口部分)
* */
public class MyJPushMessageReceiver extends JPushMessageReceiver {
@Override
public void onTagOperatorResult(Context context,JPushMessage jPushMessage) {
//tag增删查改的操作会在此方法中回调结果。
TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage);
super.onTagOperatorResult(context, jPushMessage);
}
@Override
public void onCheckTagOperatorResult(Context context,JPushMessage jPushMessage){
//查询某个tag与当前用户的绑定状态的操作会在此方法中回调结果。
TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage);
super.onCheckTagOperatorResult(context, jPushMessage);
}
@Override
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
//alias相关的操作会在此方法中回调结果。
TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage);
super.onAliasOperatorResult(context, jPushMessage);
}
@Override
public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
//设置手机号码会在此方法中回调结果。
TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage);
super.onMobileNumberOperatorResult(context, jPushMessage);
}
}
集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。
获取RegistrationID有两种方式,一种是首次注册成功是在用户自定义的广播接收器 MyReceiver
中的回掉中获取
注册成功后也可以使用函数获取
JPushInterface.getRegistrationID(context);
推送消息时,要指定推送的对象:全部,某一个人,或者某一群人。全部很好办,针对某应用“群发”就好了。Portal与API都支持向指定的 appKey 群发消息。要指定向某一个特定的人,或者某一群特定的人,则相对复杂。因为对于 JPush 来说,某一个人就是一个注册ID,这个注册ID与开发者App没有任何关系,或者说对开发者App是没有意义的。如果要对开发者App有意义的某个特定的用户推送消息,则需要:把 JPush 注册用户与开发者App 用户绑定起来。
这个绑定有两个基本思路:
- 把绑定关系保存到 JPush 服务器端
- 把绑定关系保存到开发者应用服务器中
前者,就是这里要说到的:别名与标签的功能。这个机制简单易用,适用于大多数开发者。后者,则是 JPush 提供的另外一套 RegistrationID 机制。这套机制开发者需要有应用服务器来维护绑定关系,不适用于普通开发者。也就是说第一种方式是由极光的服务器来维护这种绑定关系,第二种是将这种绑定关系放到我们自已应用的服务器上来维护,具体使用哪种方式根据实际应用场景来决定。
简单介绍这几种开发中常用到的一些API,更多特殊场景使用API可以参考极光的官方API