Android 华为推送服务集成

简介: Android 华为推送服务集成

华为推送服务集成


前言


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


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


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


运行效果图

2021051017525065.gif


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


正文


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


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


一、创建平台应用


首先进入华为开放平台


20210510094917268.png


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


登录之后,找到推送服务。


20210510095233674.png


然后配置AppGallery Connect


点击AppGallery Connect


2021051010020579.png


勾选上,点击我同意。


20210510100521459.png


点击我的项目


20210510100554802.png


勾选上,点击继续。


20210510100629193.png


点击添加项目。


20210510100713644.png


输入项目名称,然后点击确认。


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

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


20210510100924840.png


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


添加添加应用按钮。


2021051010113971.png


填写相关资料。


20210510101613548.png


点击确认。


20210510101845515.png


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


二、创建AS项目


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


20210510095812199.png


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


20210510102058439.png


点击Finish完成项目创建。


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


20210510102550424.png


现在的目录是这样的。


20210510103057484.png


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


2021051010321182.png


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

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


20210510103507664.png


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

20210510103813763.png



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


三、配置Gradle和Manifest


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

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


添加位置如下图。


7ed9724ed0e3a2b426db59b3a8617dd1.png


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


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

添加位置如下图


916396779034b6641f6859d20734112f.png


然后点击右上角的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>


添加位置如下图


e65f37bb924f4e5f94c06e55bef85c1d.png


四、生成并配置SHA256指纹


20210510105415907.png


选择APK,点击Next。


20210510105441218.png


点击Create new… 创建新的。


20210510105526538.png


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


20210510105647185.png


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


20210510105721865.png


点击OK。


20210510105900292.png


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


20210510105926817.png


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


20210510105953591.png


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


20210510110040333.png


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


20210510110212157.png


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


通过命令来获取。


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


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


20210510110941379.png


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


20210510111133692.png


这里SHA256指纹就有了。


回到平台应用处,进行填写。


20210510111244200.png


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


五、开启应用推送服务


20210510111523167.png


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


20210510111653484.png


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


20210510111743735.png


点击确定。


20210510111822298.png


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


六、配置签名


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


20210510145953543.png


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



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

添加位置如下图


20210510145845355.png


然后Sync Now。


七、HMS Toolkit工具配置


刚才进行了一系列的配置,下面通过工具来验证一下配置的结果,

点击“File > Settings > Plugins” ,搜索“HMS”找到HMS Toolkit


20210510152044763.png


点击Install,进行下载安装。


20210510154820209.png


点击重启Android Studio。


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


20210510155136611.png


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


20210510155304628.png


然后你再看看你的AS


20210510155406786.png


20210510155426625.png

点击同意


之后再点击Configuration Wizard


20210510155525873.png

68edc4f28a726a9bdfbc24d9b0150915.png


点击Add Kit。


c85aebf430fd2b1f1ff6e939dc78a03b.png


选中Push Kit,点击Confirm。


可以看到这里出现了你在开放平台上的信息,向下滑动一下


20210510155947796.png

20210510160029842.png


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


20210510160240319.png


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


20210510160615267.png


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

然后点击Next。


20210510160737551.png


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


20210510161005743.png



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


20210510162011403.png


点击Push Kit


20210510162053179.png


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


20210510162119561.gif


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


2021051016404490.png


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


20210510164409405.png


八、推送消息


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


20210510171342294.png


有了这个Token,就可以推送消息了。


在控制台复制这个Token,回到你的华为开放平台


20210510171621535.png


点击添加推送通知按钮。


20210510171926876.png


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


20210510172035644.png


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


20210510172353317.png


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


20210510173944302.png


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


20210510174543587.gif


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


20210510174826112.gif


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


2021051017525065.gif


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


20210510175638425.png


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


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


20210510180021217.png


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


20210510180102931.png


获取之后点击Next。


2021051018053665.png


填写通知的标题和内容


20210510181119278.png


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


20210510181258553.png


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


20210510181450408.png


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


20210510181545943.gif


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


九、疑难杂症


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


问题1:获取Token


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


解答:


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


结语


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




相关文章
|
2月前
|
移动开发 监控 安全
mPaaS常见问题之Android集成dexPatch热修复运行时候无法正常进行热更新如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
38 0
|
5月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
182 0
|
2天前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
|
5天前
|
Android开发
Android 高通平台集成无源码apk示例
Android 高通平台集成无源码apk示例
15 0
|
5天前
|
Android开发
Android 集成vendor下的模块
Android 集成vendor下的模块
11 0
|
20天前
|
传感器 Java 开发工具
[NDK/JNI系列03] Android Studio集成NDK开发环境
[NDK/JNI系列03] Android Studio集成NDK开发环境
22 0
|
25天前
|
存储 安全 API
请解释Android的推送服务,如Firebase Cloud Messaging(FCM)。
Firebase Cloud Messaging (FCM)是Google的跨平台推送服务,支持Android、iOS和Web,提供实时、高效、安全的消息传递。它利用WebSocket实现低延迟通信,可发送纯文本、富媒体和自定义数据。FCM还支持离线消息存储和安全传输,并提供统计分析功能。要集成FCM,需在Android项目中添加Firebase库和权限设置,通过Firebase API管理消息。
14 0
|
5月前
|
Web App开发 Android开发 ice
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
115 1
|
5月前
|
Java 定位技术 Android开发
【Android App】集成腾讯地图显示位置和地图面板讲解及实战(附源码和演示 超详细必看)
【Android App】集成腾讯地图显示位置和地图面板讲解及实战(附源码和演示 超详细必看)
89 1
|
6月前
|
Android开发
android集成aspectj
android集成aspectj
33 0