华为推送服务集成

前言

  首先说明为什么要华为推送服务呢?这也是因为Android定制系统的问题,国内对安卓系统进行的定制的大厂有华为、小米、OPPO、VIVO、魅族等,小厂就更多了。大厂对Android系统进行了定制,形成特色的Android系统,而这些系统配置在国产的Android手机中,因为你需要根根据不同的厂商进行不同的适配,所以对于Android开发者来说,适配一直是一个比较头疼的事情,不过头疼归头疼,事情还是得做,推送就属于适配的一个内容。

推送的目的是什么呢?就是让用户得到最新的咨询信息,通常的应用场景就是最新消息,新闻,通知之类的推送。而对接厂商渠道的推送,可以在让的应用在未运行的情况下,收到通知,点击通知则会打开应用,这是对接厂商渠道的目的。

举一个例子,就拿微博来说,它并不是一直在后台运行的,而当你关注的博主,发送新的资讯,亦或者是微博给你发了什么资讯,你的手机是会收到通知,而当你点开这个通知,如果应用未运行,那么会先启动应用,然后再打开相应的咨询,如果在后台运行还没有被杀死,则会直接打开咨询。而微博的用户量这么多,群众基础很大,势必会碰到不同的机型,因为它就必须做厂商渠道的对接。相信你已经了解了这个对接的意义了,下面进入正题吧。

运行效果图

Android 华为推送服务集成_Android集成华为推送

如果对这个效果还满意,可以往下看了。

正文

  我做Android开发的时候都是直接拿自己的手机来做测试,一方面比较的方便,另一方面就是自由一些,同时我基本上不用虚拟机和模拟器。所以本文的内容都是针对于真机运行使用。而我因为使用的是荣耀手机,之前是华为的子品牌,目前好像是说脱离了,不过不重要,对接还得继续,所以我主要是对接华为推送,如果我自己是小米手机,那么这个标题就是小米推送继承服务了,说明了前因后果,是为了一些后续考虑,当我这篇文章写完之后,肯定会有人说,可不可以写一篇关系小米、OPPO、VIVO、魅族等一些厂商的推送对接文章呢?

好了,我的废话够多了,下面正式来看看。

一、创建平台应用

首先进入​​华为开放平台​

Android 华为推送服务集成_xml_02


看右上角,有一个登录和注册,这一步希望读者能够独立完成,要成为华为开发者,记得做实名认证。登录之后,找到推送服务。

Android 华为推送服务集成_android_03

然后配置AppGallery Connect

点击​​AppGallery Connect​

Android 华为推送服务集成_Android集成华为推送_04


勾选上,点击我同意。

Android 华为推送服务集成_Android对接厂商渠道_05

点击我的项目

Android 华为推送服务集成_xml_06


勾选上,点击继续。

Android 华为推送服务集成_Android对接厂商渠道_07


点击添加项目。

Android 华为推送服务集成_android_08


输入项目名称,然后点击确认。然后不出意外会出出现一个重名的提示,不过不用担心你的项目已经创建好了。

如果你实在觉得不得劲,那就改一下。

Android 华为推送服务集成_xml_09

如上图,我加上了我名字的首拼音缩写。

添加添加应用按钮。

Android 华为推送服务集成_华为HMS推送服务_10


填写相关资料。

Android 华为推送服务集成_Android对接厂商渠道_11


点击确认。

Android 华为推送服务集成_xml_12


平台应用创建好了,可以看到上图要我们将这个配置文件加到项目里面去,以获得最佳的集成效果,先把这个配置文件下载到电脑本地,然后创建AS项目。

二、创建AS项目

创建AS应用也是有要求的。要求如下:

Android 华为推送服务集成_xml_13


我的AS是3.5.2的,如果你的AS还是低于3.X以下的版本,比如2.X的版本的话,你就需要升级AS了,可以参考我写的关于AS安装配置的文章,里面有详细的说明。

Android 华为推送服务集成_xml_14


点击Finish完成项目创建。

然后点击这个下拉按钮,切换到Project模式。

Android 华为推送服务集成_android_15


现在的目录是这样的。

Android 华为推送服务集成_xml_16


然后将那个配置文件复制进来。

Android 华为推送服务集成_android_17


注意看复制的位置,是放在app文件夹中的,与src文件夹是同级别的。

然后你可以看看这个配置文件

Android 华为推送服务集成_华为HMS推送服务_18


这里面的信息和你刚才创建平台应用产生的值是一致的,这是平台的应用和项目信息

Android 华为推送服务集成_xml_19


这里都是能对的上的,所以你要自己创建应用时去下载相应的配置文件。因此你最好是跟着一步一步来,拿到我的源码你反而要改的东西更多,而且你还可能改不好,所以建议你花一点时间,一步一步跟着来对接。

三、配置Gradle和Manifest

打开项目级build.gradle,添加如下代码:

//新增
maven {url 'https://developer.huawei.com/repo/'}
// 增加agcp插件配置。
classpath 'com.huawei.agconnect:agcp:1.4.2.300'

添加位置如下图。

Android 华为推送服务集成_Android集成华为推送_20

然后打开模块级build.gradle,添加如下代码:

//新增
implementation 'com.huawei.hms:push:5.3.0.304'

添加位置如下图

Android 华为推送服务集成_Android对接厂商渠道_21

然后点击右上角的Sync Now 进行资源同步。此时会下载相应的SDk文件,你不用管它。

在Android11.0中,需要在AndroidManifest.xml中进行一个配置。Android 11更改了应用查询用户在设备上已安装的其他应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本时,需要在“AndroidManifest.xml”中manifest下添加标签,使应用可以访问HMS Core(APK)。

android:name="com.huawei.hms.core.aidlservice"

添加位置如下图

Android 华为推送服务集成_Android对接厂商渠道_22

四、生成并配置SHA256指纹

Android 华为推送服务集成_Android对接厂商渠道_23


选择APK,点击Next。

Android 华为推送服务集成_xml_24


点击Create new… 创建新的。

Android 华为推送服务集成_Android对接厂商渠道_25


下面进行jks文件的生成,这是你的应用秘钥。

Android 华为推送服务集成_xml_26


选择生成秘钥的文件路径和设置秘钥名称。

Android 华为推送服务集成_Android对接厂商渠道_27


点击OK。

Android 华为推送服务集成_Android对接厂商渠道_28


秘钥密码可以和秘钥别名密码一样。

Android 华为推送服务集成_Android对接厂商渠道_29


这个提示不用管,点击OK。

Android 华为推送服务集成_Android集成华为推送_30


选择生成应用的类型和生成APK的路径。

Android 华为推送服务集成_Android集成华为推送_31


点击Finish。当你的AS的右下角出现这样的提示时,说明你的APK构建成功了,这个APK你是可以发给其他人的,都是可安装的。

Android 华为推送服务集成_华为HMS推送服务_32


刚才这么做是为了验证这个创建的jks文件没有问题,下面来获取SHA256指纹。

通过命令来获取。

-list -v -keystore D:\APK\huaweiPush.jks

这里的D:\APK\huaweiPush.jks是我的jks文件存放路径,请以自己的为准。

Android 华为推送服务集成_Android集成华为推送_33


输入密码,输入是不可见,输入完成之后回车即可。

Android 华为推送服务集成_Android集成华为推送_34


这里SHA256指纹就有了。回到平台应用处,进行填写。

Android 华为推送服务集成_Android集成华为推送_35


Android 华为推送服务集成_android_36


这样就填写好了,这个SHA256指纹只用来检查应用的真实性。

五、开启应用推送服务

Android 华为推送服务集成_xml_37


然后切换到这个API管理,看看你的推送服务有没有打开。

Android 华为推送服务集成_Android对接厂商渠道_38


在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,然后会弹出一个框。

Android 华为推送服务集成_Android集成华为推送_39


点击确定。

Android 华为推送服务集成_xml_40


选择中国(如果你在国外,也可以切换对应国家),点击确定。

六、配置签名

将之前创建的huaweiPush.jks文件复制到你的app下

Android 华为推送服务集成_android_41

打开你的app的build.gradle,在里面添加

//配置签名
signingConfigs {
config {
storeFile file('huaweiPush.jks')
keyAlias 'key0'
keyPassword '203472'
storePassword '203472'
v1SigningEnabled true
v2SigningEnabled true
}
}

添加位置如下图

Android 华为推送服务集成_Android集成华为推送_42


然后Sync Now。

七、HMS Toolkit工具配置

刚才进行了一系列的配置,下面通过工具来验证一下配置的结果,
点击“File > Settings > Plugins” ,搜索“HMS”找到HMS Toolkit

Android 华为推送服务集成_Android集成华为推送_43


点击Install,进行下载安装。

Android 华为推送服务集成_Android对接厂商渠道_44

点击重启Android Studio。

然后你会发现你的AS工具栏上面会多出来一个HMS

Android 华为推送服务集成_Android集成华为推送_45


先登录一下,这里也需要使用华为账号。

Android 华为推送服务集成_Android对接厂商渠道_46


然后你再看看你的AS

Android 华为推送服务集成_android_47

Android 华为推送服务集成_Android对接厂商渠道_48


点击同意之后再点击Configuration Wizard

Android 华为推送服务集成_Android集成华为推送_49


Android 华为推送服务集成_android_50


点击Add Kit。

Android 华为推送服务集成_xml_51


选中Push Kit,点击Confirm。可以看到这里出现了你在开放平台上的信息,向下滑动一下

Android 华为推送服务集成_华为HMS推送服务_52


Android 华为推送服务集成_xml_53


这里的jks和密码都给你填写好了,如果没有的话,你就自己选择项目中app模块下的huaweiPush.jks,然后填写秘钥密码、秘钥别名、秘钥别名密码。

Android 华为推送服务集成_Android集成华为推送_54


点击这个Generate按钮,会创建SHA56指纹,这里的指纹和你之前通过jks生成的是一致,如果不一致,说明你的jks不对。

Android 华为推送服务集成_华为HMS推送服务_55


这里可以做一下对比验证。

然后点击Next。

Android 华为推送服务集成_xml_56


这里会一步一步的检查你的所有配置,如果出现检查不通过的项,请根据界面提示和点击“Link”手动设置,如下图所示。设置完成后,点击“Retry”重新进行检查。

Android 华为推送服务集成_android_57


可以看到我的全部检查项均通过,点击“Go to coding assistant”按钮。

Android 华为推送服务集成_华为HMS推送服务_58


点击Push Kit

Android 华为推送服务集成_Android集成华为推送_59


下面还是一个演示的效果图。

Android 华为推送服务集成_android_60

按照演示操作一下。然后你会发现生成了一个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"

如下代码是刚才生成的。

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"

不过这个里面并没有刚才生成的PushGetTokenActivity的配置,我们把这个

PushGetTokenActivity配置进AndroidManifest.xml并且设置为启动的Activity,如下图所示

Android 华为推送服务集成_Android集成华为推送_61


然后通过USB运行安装应用到你的手机上。

Android 华为推送服务集成_xml_62

八、推送消息

点击GetToken按钮,你会看到出现了一个token信息,而在控制台也会打印Token

Android 华为推送服务集成_xml_63


有了这个Token,就可以推送消息了。在控制台复制这个Token,回到你的华为开放平台

Android 华为推送服务集成_android_64


点击添加推送通知按钮。

Android 华为推送服务集成_Android集成华为推送_65


填写一些测试信息,右边的预览可以看到通知的样式。向下滑动

Android 华为推送服务集成_android_66


点这个预估用户数按钮,会根据你输入的Token进行检测,看这个用户是否存在。

Android 华为推送服务集成_华为HMS推送服务_67


这里检测到一个用户数。向上滑动找到一个效果测试按钮,点击它,输入刚才复制的Token。

Android 华为推送服务集成_xml_68


点击确定,然后你会看到手机上多了一个推送消息。

Android 华为推送服务集成_Android集成华为推送_69


因为我现在就是在应用的首页,所以点击之后没有什么效果,下面我回到桌面再来试试。

Android 华为推送服务集成_Android集成华为推送_70


然后我们把应用的进程杀掉,再来测试一下。

Android 华为推送服务集成_Android集成华为推送

后面你还可以再杀死应用,息屏的状态下,通过后台发送通知进行测试看能不能收到消息。这个方式自行去测试一下。我测试一下是可以收到通知的,如下图所示,当你点击这个通知就会进入到你的App首页。

Android 华为推送服务集成_华为HMS推送服务_72

那么到这里,如果你觉得在网页上发送消息测试太麻烦了,其实也可以通过刚才AS中的HMS ToolKit中

在Push Kit卡片的工具栏中,点击“Message Test”(Push Kit消息推送测试工具),用于测试服务器向手机推送消息。

Android 华为推送服务集成_华为HMS推送服务_73

点击这个按钮来获取Get APP ID and APP SECRET

Android 华为推送服务集成_华为HMS推送服务_74


获取之后点击Next。

Android 华为推送服务集成_android_75


填写通知的标题和内容

Android 华为推送服务集成_Android对接厂商渠道_76


这里的Token我并没有填写,点击这个绿色三角形运行按钮。

Android 华为推送服务集成_Android对接厂商渠道_77


当你的应用在手机上安装时,AS会弹出这样的一个提示窗口,如上图的右下角所示,点击OK,就是将Token自动填写进去。

Android 华为推送服务集成_Android对接厂商渠道_78


然后点击这个Send。手机上会收到通知,如下图所示:

Android 华为推送服务集成_Android对接厂商渠道_79

好了,通过工具发送通知就是手机上收到时没有感觉,听不到铃声,而通过后台发送就会有。其他的区别自己去发现吧。本文没有什么源码,因为我都没有写过代码,全是配置产生的。希望读者能够认真的跟着操作一遍。

九、疑难杂症

  在这里分享读者跟着文章操作时遇到的问题和解决方法,因为我在写的时候没有遇到过,不过随着版本的更新会出现一个问题也是正常。

问题1:获取Token

华为荣耀9i(android 9,EMUI 9.1.0)上面获取到的token没有在界面上显示的问题。

解答:

这是因为在低于EMUI10的手机上,获取token不是在HmsInstanceId类的getToken(String,String)里获取的,而是在HmsMessageService服务的onNewToken(String)获取的。

结语

不要想着坐享其成,自己付出努力了才会有成就,实践出真知,我是初学者-Study,山高水长,后会有期~