华为推送服务集成
前言
首先说明为什么要华为推送服务呢?这也是因为Android定制系统的问题,国内对安卓系统进行的定制的大厂有华为、小米、OPPO、VIVO、魅族等,小厂就更多了。大厂对Android系统进行了定制,形成特色的Android系统,而这些系统配置在国产的Android手机中,因为你需要根根据不同的厂商进行不同的适配,所以对于Android开发者来说,适配一直是一个比较头疼的事情,不过头疼归头疼,事情还是得做,推送就属于适配的一个内容。
推送的目的是什么呢?就是让用户得到最新的咨询信息,通常的应用场景就是最新消息,新闻,通知之类的推送。而对接厂商渠道的推送,可以在让的应用在未运行的情况下,收到通知,点击通知则会打开应用,这是对接厂商渠道的目的。
举一个例子,就拿微博来说,它并不是一直在后台运行的,而当你关注的博主,发送新的资讯,亦或者是微博给你发了什么资讯,你的手机是会收到通知,而当你点开这个通知,如果应用未运行,那么会先启动应用,然后再打开相应的咨询,如果在后台运行还没有被杀死,则会直接打开咨询。而微博的用户量这么多,群众基础很大,势必会碰到不同的机型,因为它就必须做厂商渠道的对接。相信你已经了解了这个对接的意义了,下面进入正题吧。
运行效果图
如果对这个效果还满意,可以往下看了。
正文
我做Android开发的时候都是直接拿自己的手机来做测试,一方面比较的方便,另一方面就是自由一些,同时我基本上不用虚拟机和模拟器。所以本文的内容都是针对于真机运行使用。而我因为使用的是荣耀手机,之前是华为的子品牌,目前好像是说脱离了,不过不重要,对接还得继续,所以我主要是对接华为推送,如果我自己是小米手机,那么这个标题就是小米推送继承服务了,说明了前因后果,是为了一些后续考虑,当我这篇文章写完之后,肯定会有人说,可不可以写一篇关系小米、OPPO、VIVO、魅族等一些厂商的推送对接文章呢?
好了,我的废话够多了,下面正式来看看。
一、创建平台应用
首先进入华为开放平台
看右上角,有一个登录和注册,这一步希望读者能够独立完成,要成为华为开发者,记得做实名认证。
登录之后,找到推送服务。
然后配置AppGallery Connect
点击AppGallery Connect
勾选上,点击我同意。
点击我的项目
勾选上,点击继续。
点击添加项目。
输入项目名称,然后点击确认。
然后不出意外会出出现一个重名的提示,不过不用担心你的项目已经创建好了。
如果你实在觉得不得劲,那就改一下。
如上图,我加上了我名字的首拼音缩写。
添加添加应用按钮。
填写相关资料。
点击确认。
平台应用创建好了,可以看到上图要我们将这个配置文件加到项目里面去,以获得最佳的集成效果,先把这个配置文件下载到电脑本地,然后创建AS项目。
二、创建AS项目
创建AS应用也是有要求的。要求如下:
我的AS是3.5.2的,如果你的AS还是低于3.X以下的版本,比如2.X的版本的话,你就需要升级AS了,可以参考我写的关于AS安装配置的文章,里面有详细的说明。
点击Finish完成项目创建。
然后点击这个下拉按钮,切换到Project模式。
现在的目录是这样的。
然后将那个配置文件复制进来。
注意看复制的位置,是放在app文件夹中的,与src文件夹是同级别的。
然后你可以看看这个配置文件
这里面的信息和你刚才创建平台应用产生的值是一致的,这是平台的应用和项目信息
这里都是能对的上的,所以你要自己创建应用时去下载相应的配置文件。因此你最好是跟着一步一步来,拿到我的源码你反而要改的东西更多,而且你还可能改不好,所以建议你花一点时间,一步一步跟着来对接。
三、配置Gradle和Manifest
打开项目级build.gradle,添加如下代码:
//新增
maven {url 'https://developer.huawei.com/repo/'}
// 增加agcp插件配置。
classpath 'com.huawei.agconnect:agcp:1.4.2.300'
添加位置如下图。
然后打开模块级build.gradle,添加如下代码:
//新增
implementation 'com.huawei.hms:push:5.3.0.304'
添加位置如下图
然后点击右上角的Sync Now 进行资源同步。此时会下载相应的SDk文件,你不用管它。
在Android11.0中,需要在AndroidManifest.xml中进行一个配置。Android 11更改了应用查询用户在设备上已安装的其他应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本时,需要在“AndroidManifest.xml”中manifest下添加标签,使应用可以访问HMS Core(APK)。
<!--适配Android11,使应用可以访问HMS Core(APK)-->
<queries>
<intent>
<action android:name="com.huawei.hms.core.aidlservice" />
</intent>
</queries>
添加位置如下图
四、生成并配置SHA256指纹
选择APK,点击Next。
点击Create new… 创建新的。
下面进行jks文件的生成,这是你的应用秘钥。
选择生成秘钥的文件路径和设置秘钥名称。
点击OK。
秘钥密码可以和秘钥别名密码一样。
这个提示不用管,点击OK。
选择生成应用的类型和生成APK的路径。
点击Finish。当你的AS的右下角出现这样的提示时,说明你的APK构建成功了,这个APK你是可以发给其他人的,都是可安装的。
刚才这么做是为了验证这个创建的jks文件没有问题,下面来获取SHA256指纹。
通过命令来获取。
keytool -list -v -keystore D:\APK\huaweiPush.jks
这里的D:\APK\huaweiPush.jks是我的jks文件存放路径,请以自己的为准。
输入密码,输入是不可见,输入完成之后回车即可。
这里SHA256指纹就有了。
回到平台应用处,进行填写。
这样就填写好了,这个SHA256指纹只用来检查应用的真实性。
五、开启应用推送服务
然后切换到这个API管理,看看你的推送服务有没有打开。
在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,然后会弹出一个框。
点击确定。
选择中国(如果你在国外,也可以切换对应国家),点击确定。
六、配置签名
将之前创建的huaweiPush.jks文件复制到你的app下
打开你的app的build.gradle,在里面添加
//配置签名
signingConfigs {
config {
storeFile file('huaweiPush.jks')
keyAlias 'key0'
keyPassword '203472'
storePassword '203472'
v1SigningEnabled true
v2SigningEnabled true
}
}
添加位置如下图
然后Sync Now。
七、HMS Toolkit工具配置
刚才进行了一系列的配置,下面通过工具来验证一下配置的结果,
点击“File > Settings > Plugins” ,搜索“HMS”找到HMS Toolkit
点击Install,进行下载安装。
点击重启Android Studio。
然后你会发现你的AS工具栏上面会多出来一个HMS
先登录一下,这里也需要使用华为账号。
然后你再看看你的AS
点击同意
之后再点击Configuration Wizard
点击Add Kit。
选中Push Kit,点击Confirm。
可以看到这里出现了你在开放平台上的信息,向下滑动一下
这里的jks和密码都给你填写好了,如果没有的话,你就自己选择项目中app模块下的huaweiPush.jks,然后填写秘钥密码、秘钥别名、秘钥别名密码。
点击这个Generate按钮,会创建SHA56指纹,这里的指纹和你之前通过jks生成的是一致,如果不一致,说明你的jks不对。
这里可以做一下对比验证。
然后点击Next。
这里会一步一步的检查你的所有配置,如果出现检查不通过的项,请根据界面提示和点击“Link”手动设置,如下图所示。设置完成后,点击“Retry”重新进行检查。
可以看到我的全部检查项均通过,点击“Go to coding assistant”按钮。
点击Push Kit
下面还是一个演示的效果图。
按照演示操作一下。然后你会发现生成了一个Activity,一个PushMsgService,还有一个activity_push_get_token.xml,还有AndroidManifest.xml中的改动,看看AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.llw.huaweipush">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true" />
<service
android:name=".PushMsgService"
android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
如下代码是刚才生成的。
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="true" />
<service
android:name=".PushMsgService"
android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
不过这个里面并没有刚才生成的PushGetTokenActivity的配置,我们把这个
PushGetTokenActivity配置进AndroidManifest.xml并且设置为启动的Activity,如下图所示
然后通过USB运行安装应用到你的手机上。
八、推送消息
点击GetToken按钮,你会看到出现了一个token信息,而在控制台也会打印Token
有了这个Token,就可以推送消息了。
在控制台复制这个Token,回到你的华为开放平台
点击添加推送通知按钮。
填写一些测试信息,右边的预览可以看到通知的样式。向下滑动
点这个预估用户数按钮,会根据你输入的Token进行检测,看这个用户是否存在。
这里检测到一个用户数。向上滑动找到一个效果测试按钮,点击它,输入刚才复制的Token。
点击确定,然后你会看到手机上多了一个推送消息。
因为我现在就是在应用的首页,所以点击之后没有什么效果,下面我回到桌面再来试试。
然后我们把应用的进程杀掉,再来测试一下。
后面你还可以再杀死应用,息屏的状态下,通过后台发送通知进行测试看能不能收到消息。这个方式自行去测试一下。我测试一下是可以收到通知的,如下图所示,当你点击这个通知就会进入到你的App首页。
那么到这里,如果你觉得在网页上发送消息测试太麻烦了,其实也可以通过刚才AS中的HMS ToolKit中
在Push Kit卡片的工具栏中,点击“Message Test”(Push Kit消息推送测试工具),用于测试服务器向手机推送消息。
点击这个按钮来获取Get APP ID and APP SECRET
获取之后点击Next。
填写通知的标题和内容
这里的Token我并没有填写,点击这个绿色三角形运行按钮。
当你的应用在手机上安装时,AS会弹出这样的一个提示窗口,如上图的右下角所示,点击OK,就是将Token自动填写进去。
然后点击这个Send。手机上会收到通知,如下图所示:
好了,通过工具发送通知就是手机上收到时没有感觉,听不到铃声,而通过后台发送就会有。其他的区别自己去发现吧。本文没有什么源码,因为我都没有写过代码,全是配置产生的。希望读者能够认真的跟着操作一遍。
九、疑难杂症
在这里分享读者跟着文章操作时遇到的问题和解决方法,因为我在写的时候没有遇到过,不过随着版本的更新会出现一个问题也是正常。
问题1:获取Token
华为荣耀9i(android 9,EMUI 9.1.0)上面获取到的token没有在界面上显示的问题。
解答:
这是因为在低于EMUI10的手机上,获取token不是在HmsInstanceId类的getToken(String,String)里获取的,而是在HmsMessageService服务的onNewToken(String)获取的。
结语
不要想着坐享其成,自己付出努力了才会有成就,实践出真知,我是初学者-Study,山高水长,后会有期~