华为推送¶
华为推送是为开发者提供的消息推送平台,建立了从云端到手机端的消息推送通道,让应用可以将最新信息及时通知你的用户,从而构筑良好的用户关系,提升用户的活跃度。华为Push支持透传消息、通知栏消息、富媒体消息。更多信息请参考 华为推送服务 。
华为推送工作原理
Step 1: 开发者的 App 集成华为 Push 客户端 SDK,并调用相关接口获取 PushToken;
Step 2: 开发者的App将获取到的华为 PushToken 上报到开发者自己的服务器上;
Step 3: 开发者利用服务器上保存的 PushToken 向设备上的 App 发送通知消息;
Step 4: 消息携带的 PushToken 作为鉴权和路由机制会通过华为 Push 平台将消息发送到最终用户设备上。
华为推送集成操作流程如下:
配置和注册华为 Push¶
首先在 华为开发者网站 注册,并在华为推送服务创建应用,具体请参考 华为推送服务接入准备 。
应用创建后将获得 APPID 和 APP SECRET。
其中:APPID(全称 applicationID)是华为开发者为APP分联盟配的唯一标识。
APP SECRET 为应用秘钥,在开发 PUSH 服务端(app provider)时需要用到此参数。
将 AppID、APP SECRET 设置到 Juphoon Cloud Platform 控制台的对应应用中。
登录 Juphoon Cloud Platform 并打开应用,进入 设置 > 基本 > +添加push > HMSpush 配置,如下图所示:
获取 Token。
终端调用华为 Push 接口,使用 AppID 向华为 Push 服务器注册服务,并获得 Token。具体如下:
在 AndroidManifest 中将 AppID 替换成自己的 AppID 值。
在 HMSPushReceiver 中将 AppID 替换成自己的 AppID 值。
您也可以参考 华为推送服务客户端开发指南。
调用 Juphoon Cloud Platform SDK 接口将 Token 注册到 Juphoon Cloud Platform 服务器中。
代码集成¶
初始化 Push
/**
* 创建 JCPush 对象
*
* @param client JCClient 对象
* @return 返回 JCPush 对象
*/
public static JCPush create(JCClient client);
示例代码:
JCClient client = JCClient.create(Context, "your appkey", this, null);
JCPush push = JCPush.create(client);
注册华为 push
在 HMSPushReceiver 类中的 onToken 成功收到回调之后,调用 initWithHmsPush 接口进行注册:
public void onToken(Context context, String s, Bundle bundle) {
super.onToken(context, s, bundle);
// 向菊风平台添加推送参数
JCPushTemplate pushInfo = new JCPushTemplate();
pushInfo.initWithHmsPush("your AppId", s);
JCManager.getInstance().push.addPushInfo(pushInfo);
// 设置通话推送参数
pushInfo.initWithCall(JCPushTemplate.HUAWEI, JCManager.getInstance().client.getUserId(), "呼叫", "1");
JCManager.getInstance().push.addPushInfo(pushInfo);
// 设置消息推送参数
pushInfo.initWithText(JCPushTemplate.HUAWEI, JCManager.getInstance().client.getUserId(), "Text", "消息", "1");
JCManager.getInstance().push.addPushInfo(pushInfo);
}
其中,initWithHmsPush 接口如下
/**
* 生成华为推送参数
*
* @param appId Justalk cloud 上注册的该应用的华为Push 的 AppId 值
* @param token 华为推送注册成功返回的 regId
*/
public void initWithHmsPush(String AppId, String token);
设置推送参数接口如下:
通话推送参数
/**
* 生成通话推送参数
*
* @param pushFactory 推送厂商
* @param selfId 自身唯一标识符
* @param description 描述信息,如 "呼叫"
* @param passThrough 华为推送相关参数,"1"表示透传消息,"0"表示非透传消息,可以参看华为推送文档,目前只支持透传消息,因华为特殊的格式,不建议使用非透传消息
*/
public void initWithCall(@PushFactory int pushFactory, String selfId, String description, String passThrough);
消息推送参数
/**
* 生成消息类推送参数
*
* @param pushFactory 推送厂商
* @param selfId 自身唯一标识符
* @param type 消息类型,自定义类型,如 Text
* @param description 提示内容,针对文本消息如果要提示发送内容,则填 null,类似文件消息则要填相应的信息,例如 "发送了一段语音"
* @param passThrough 华为推送相关参数,"1"表示透传消息,"0"表示非透传消息,可以参看华为推送文档,目前只支持透传消息,因华为特殊的格式,不建议使用非透传消息
*/
public void initWithText(@PushFactory int pushFactory, String selfId, String type, String description, String passThrough);
添加推送模板接口如下:
/**
* 添加推送模板,用于服务器将不同类型的推送以不同的内容格式推给客户端
*
* @param info 推送信息
* @return 成功返回true,失败返回false
*/
public abstract boolean addPushInfo(JCPushTemplate info);
注解
在收到消息推送时,可以在 HMSPushReceiver 类中的 onPushMsg 中进行自定义的消息处理。
由于 app 杀死以后点击 push 不会回调 onEvent(因为广播被系统限制了),所以自定义动作的处理统一用 intent 来实现。参数传递依赖 android 结构体中的intent参数。intent 中处理消息的组件只能是 activity,不能是 service 或 receiver。
示例代码:
public void onPushMsg(Context context, byte[] bytes, String s) {
// 收到华为 push 后续处理
Intent intent = new Intent(JCApplication.sContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
JCApplication.sContext.startActivity(intent);
super.onPushMsg(context, bytes, s);
}
验证推送¶
推送集成后,即可进行验证,具体如下:
使用用户名登录您的 App,登录后将 App 从后台杀掉。
重要
透传消息需要设置开机自启动才能拉起应用。
进入 Juphoon for developer ->控制台 ->我的应用 ->设置 ->基本 ->验证 Push。
输入用户名和推送内容,点击验证,此时页面应提示“push 信息发送到服务器成功”。