owl's blog

Android 华为集成push服务

2019.06.10

前言

最近Android项目上面有个需求,看了官方文档,说实话没看懂,就自己写了个记录下。

服务简介

1、 开发者通过在APP服务器端调用PUSH接口,向Huwei PUSH平台发送推送消息。 2、 Huwei PUSH平台将消息发给安装了相应APP的终端设备。

步骤

1、首先在华为开发者联盟注册个账号,认证,找到push服务,暂时就先不用管它了 one

2、在申请华为Push服务前,请先确定自己的应用包名,并创建Android开发工程(创建这个就不用说了吧)。

3、在开发环境生成Android签名证书,假设开发者生成的证书名为android.keystore

Build -Build-Generate Signed Bundle/APK 然后 创建一个新的签名 填写完成 一步一步跟着走 two

完成之后会发现项目的根目录会生成一个.jks文件 这个就是你刚刚生成的。 three

4、打开命令行工具(使用CMD命令),执行cd命令进入keytool.exe所在的目录。 cd %JAVA_HOME%/bin 执行命令keytool -list -v -keystore < keystore-file >,按命令行提示进行操作。 其中 < keystore-file > 是应用签名文件的完整路径。 输入你刚刚生成文件时输入的密码 fore 会得到这个东西**SHA256 **,将这个东西复制到华为开发者联盟里面 新建push服务时,会需要这个

5、去华为开发者联盟创建一个push服务的应用

9

将信息填写完全,ps : 应用包名要记得填写你刚刚创建的应用的包名,SHA256 就是刚刚在cmd里面获取到的东西

6、下载HMS SDK Agent ,点击下载 解压 ,运行这个 ,按照提示 一步一步来 ,完了之后就会有个copysrc 生成 里面就是你所需要的代码 5 6

直接将里面java文件夹复制到你的项目中 此时AppManifestConfig.xml这个文件就需要你自己打开看了 有些可以复制 里面生成的注释很详细

7、配置AndroidManifest文件 ,跟着刚刚生成的文件问题就不大,

8、在activity_main.xml页面加个按钮,不添加也可以,直接在MainActivity中直接调用方法。 获取token的按钮因为我也是做测试就只写了一个获取token,然后在MainActivty中写一个获取Token的方法,调用这个方法就可以

/**
 * 获取token
 */

private void getToken() {
    showLog("get token: begin");
    HMSAgent.Push.getToken(new GetTokenHandler() {
        @Override
        public void onResult(int rtnCode, TokenResult tokenResult) {
            showLog("get token: end" + rtnCode);
        }
    }); 
} 

9、编写一个HuaweiPushRevicer去继承 extends PushReceiver,这里可以参考 HMSAgent_2.6.3.301_sample这个项目的例子 ,然后在你项目下面建一个Myapplication

7

HuaweiPushRevicer 实现onToken,onPushState ,onPushMsg,onEvent,这几个抽象方法,用来接收token返回,push连接状态,透传消息和通知栏点击事件处理。

onToken 调用getToken方法后,获取服务端返回的token结果,返回token以及belongId

onPushState 调用getPushState方法后,获取push连接状态的查询结果

onPushMsg 推送消息下来时会自动回调onPushMsg方法实现应用透传消息处理。本接口必须被实现。 在开发者网站上发送push消息分为通知和透传消息

通知为直接在通知栏收到通知,通过点击可以打开网页,应用 或者富媒体,不会收到onPushMsg消息

透传消息不会展示在通知栏,应用会收到onPushMsg

onEvent 该方法会在设置标签、点击打开通知栏消息、点击通知栏上的按钮之后被调用。由业务决定是否调用该函数。

10、在build.gradle中配置这个

8

signingConfigs这个东西要配,不然会报6003

11、运行项目,获取token,在华为开发者联盟push服务中填写相关信息, 发送试试 ,存在通知栏和透传信息 ,然后就完了。

仅仅是一个学习记录的过程,哈哈哈哈哈哈,最扎心的是最后对于需求没用!~~~~!