Android ~ 集成华为推送

Android ~ 集成华为推送,第1张

概述Android~集成华为推送功能流程如下图所示:开发流程一、配置AppGalleryConnect1、注册成为开发者注册实名认证2、创建应用创建项目在项目下添加应用3、生成签名证书指纹4、配置签名证书指纹5、设置数据存储位置6、打开相关服务二、集成HMSCoreSDK1、添加应用的AppG

AndroID ~ 集成华为推送功能流程如下图所示:开发流程一、配置AppGallery Connect1、注册成为开发者注册实名认证2、创建应用创建项目在项目下添加应用3、生成签名证书指纹4、配置签名证书指纹5、设置数据存储位置6、打开相关服务二、集成HMS Core SDK1、添加应用的AppGallery Connect配置文件2、配置HMS Core SDK的Maven仓地址3、添加编译依赖4、配置签名5、多语言设置6、同步工程三、配置Manifest文件四、配置混淆脚本五、应用开发申请Push Token打开自定义App页面在自定义Activity类中接收数据。大文本样式inbox样式自定义通知渠道

序言:刚尝试了在app中集成华为推送,这里简单做个记录,全部内容依据华为推送文档

功能流程如下图所示:


描述1:

  ▎Step1与Step2:您的应用集成Push SDK,再调用HmsInstanceID类中的getToken方法获取到Push Token
  ▎Step3:您的应用将获取到的Token上报到您的服务器“App ProvIDer Server”上。
  ▎Step4:您使用服务器保存的Token调用Push服务端提供的API推送Push消息
  ▎Step5:Push服务器将您推送的消息发送给Token对应的用户设备,设备接收消息
  ▎Step6与Step7:Push服务器检测到设备消息响应时,将响应状态回执给您,您需实现消息回执接收能力

描述2:

每个设备上的每个应用的Token都是唯一存在的,客户端调用HmsInstanceID类中的getToken方法向服务端请求应用的唯一标识:Push Token,您的服务器需要根据这个Token推送消息。您可以将Token上报到自己的应用服务器维护并加入Token列表,然后调用Push服务器的推送消息API,根据Token批量推送消息,服务器发送消息请参见服务端开发指导。当getToken方法返回为空时,可通过HmsMessageService类中的onNewToken方法获取Token值。

开发流程

一、配置Appgallery Connect1、注册成为开发者

华为开发者联盟:https://developer.huawei.com/consumer/cn

@L_403_34@注册


实名认证

2、创建应用创建项目


在项目下添加应用


3、生成签名证书指纹

执行命令 keytool -List -v -keystore filename
举例:

keytool -List -v -keystore C:\TestApp.jks

根据结果获取对应的SHA256指纹。

4、配置签名证书指纹

  4.1、点击“我的项目”。
  4.2、在项目列表中找到您的项目,在项目中点击需要配置签名证书指纹的应用。
  4.3、在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书指纹”后的 + 号图标,输入生成的SHA256指纹。   
  4.4、配置完成后点击√号

5、设置数据存储位置

  5.1、登录 Appgallery Connect 网站,选择“我的项目”。
  5.2.、在项目列表中找到您的项目,在项目下的应用列表中选择您需要设置数据存储位置的应用。
  5.3. 进入“项目设置 > 常规”页面,在“项目”下点击“数据存储位置”后的“设置”,并在d出的提示框中选择数据存储位置。

6、打开相关服务

如果应用需要使用华为推送服务,那么必须开通对应的服务。
  6.1、登录 Appgallery Connect 网站 ,选择“我的项目”。

  6.2、在项目列表中找到您的项目,在项目下的应用列表中选择需要配置推送服务参数的应用。

  6.3、前往“项目设置>API管理”中开启“Push Kit”权限。

  6.4、在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,在d出的提示框中点击“确定”。

  6.5、确认开通后,您可以在“配置”页签开通和关闭您的项目级和应用级的推送服务权益。

二、集成HMS Core SDK

  针对AndroID Studio开发环境,华为提供了Maven仓集成方式的HMS Core SDK包。在开始开发前,您需要将HMS Core SDK集成到您的AndroID Studio开发环境中。

1、添加应用的Appgallery Connect配置文件

  1.1、登录Appgallery Connect网站,点击“我的项目”。
  1.2、在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。
  1.3、在“项目设置 >
常规”页面的“应用”区域,点击“agconnect-services.Json”下载配置文件。

@H_629_301@

  1.4、将“agconnect-services.Json”文件拷贝到应用级根目录下。

2、配置HMS Core SDK的Maven仓地址

  2.1、打开AndroID Studio项目级“build.gradle”文件。

  2.2、添加HUAWEI agcp插件以及Maven代码库。

在“buildscript > repositorIEs”中配置HMS Core SDK的Maven仓地址。 在“allprojects > repositorIEs”中配置HMS Core SDK的Maven仓地址。
如果App中添加了“agconnect-services.Json”文件则需要在“buildscript >
dependencIEs”中增加agcp配置。

buildscript {    repositorIEs {        Google()        jcenter()        // 配置HMS Core SDK的Maven仓地址。        maven {url 'https://developer.huawei.com/repo/'}    }    dependencIEs {        ...        // 增加agcp配置。        classpath 'com.huawei.agconnect:agcp:1.4.2.300'    }} allprojects {    repositorIEs {        Google()        jcenter()        // 配置HMS Core SDK的Maven仓地址。        maven {url 'https://developer.huawei.com/repo/'}    }} 

说明
  Maven仓地址无法直接在浏览器中打开访问,只能在IDE中配置。如需添加多个Maven代码库,请将华为公司的Maven仓地址配置在最后。

3、添加编译依赖

  3.1、打开应用级的“build.gradle”文件。

  3.2、在“dependencIEs”中添加如下编译依赖。

dependencIEs {    implementation 'com.huawei.hms:push:{version}'}

说明
  {version}请替换为实际的SDK版本号,版本号索引请参见版本更新说明,例如:implementation ‘com.huawei.hms:push:5.0.4.302’。
在文件头apply plugin: 'com.androID.application’下一行添加如下配置。
apply plugin: ‘com.huawei.agconnect’

4、配置签名

  将生成签名证书指纹步骤中生成的签名文件拷贝到工程的app目录下,在build.gradle文件中配置签名。

androID {     signingConfigs {         config {             keyAlias 'xxx'             keyPassword 'xxxx'             storefile file('xxx.jks')             storePassword 'xxxx'         }     }      buildTypes {         deBUG {             signingConfig signingConfigs.config         }         release {             signingConfig signingConfigs.config             MinifyEnabled false             proguardfiles getDefaultProguardfile('proguard-androID-optimize.txt'), 'proguard-rules.pro'         }     } }
5、多语言设置

   如果您的应用不需要设置只支持某些特定语言,则请忽略本步骤。应用将默认支持所有HMS Core SDK支持的语言。
如果您的应用需要设置只支持某些特定语言,则可通过本步骤配置。
打开应用级的“build.gradle”文件。

在“androID > defaultConfig”中新增“resConfigs”,配置需要支持的语种,配置格式如下:

androID {        defaultConfig {                ...                resConfigs "en", "zh-rCN", "需要支持的其他语言"        }}    

HMS Core SDK支持的语言列表请参见HMS Core SDK支持的语言。

6、同步工程

   在完成以上的配置后,点击工具栏中的gradle同步图标完成“build.gradle”文件的同步,然后将相关依赖下载到本地。

说明
  如果出现错误,请检查网络连接是否正常,以及检查“build.gradle”文件是否正确。

三、配置Manifest文件

  集成最新的HMS Core Push SDK版本后要在“AndroIDManifest.xml”文件的application标签下注册自己的Service,此步骤用于接收服务器推送的消息与Token,接收方法见申请Push Token。
  您需要自行开发用于业务继承于HmsMessageService类并实现其中的方法,此处以DemoHmsMessageService类为例(类名由您自定义)。

<service    androID:name=".DemoHmsMessageService"    androID:exported="false">    <intent-filter>        <action androID:name="com.huawei.push.action.MESSAGING_EVENT"/>    </intent-filter></service>

说明
  exported属性需要设置为false,限制其他应用的组件唤醒该service。

四、配置混淆脚本

   您编译APK前需要配置混淆配置文件,避免混淆HMS Core SDK导致功能异常。
  在应用级根目录下打开混淆配置文件“proguard-rules.pro”,加入排除HMS Core SDK的混淆配置脚本。

-ignorewarnings-keepattributes *Annotation*-keepattributes Exceptions-keepattributes InnerClasses-keepattributes Signature-keepattributes Sourcefile,lineNumbertable-keep class com.huawei.hianalytics.**{*;}-keep class com.huawei.updatesdk.**{*;}-keep class com.huawei.hms.**{*;}

   如果您使用了AndResGuard,需要在应用级的“build.gradle”文件中加入AndResGuard允许清单。

"R.string.hms*","R.string.connect_server_fail_prompt_toast","R.string.getting_message_fail_prompt_toast","R.string.no_available_network_prompt_toast","R.string.third_app_*","R.string.upsdk_*","R.layout.hms*","R.layout.upsdk_*","R.drawable.upsdk*","R.color.upsdk*","R.dimen.upsdk*","R.style.upsdk*", "R.string.agc*"  
五、应用开发申请Push Token

场景介绍
  每个设备上的每个应用的Token都是唯一存在的,客户端调用HmsInstanceID类中的getToken方法向服务端请求应用的唯一标识:Push Token,您的服务器需要根据这个Token推送消息。您可以将Token上报到自己的应用服务器维护并加入Token列表,然后调用Push服务器的推送消息API,根据Token批量推送消息,服务器发送消息请参见服务端开发指导。当getToken方法返回为空时,可通过HmsMessageService类中的onNewToken方法获取Token值。

Token会在包括但不限于下述场景中发生变化
应用卸载重装。
应用调用注销Token方法。
用户恢复出厂设置。
清除应用数据。

说明
  EMUI 9.1版本之前华为设备上的应用卸载重装时,Token不会发生变化。
  华为推送服务为了提升安全性,在2020年11月更新了Token生成规则和变更机制,称之为Token格式3.0。
  Token长度为不定长,当前为130字节,包含字符“0-9”、“a-z”、“A-Z”及特殊字符“-”和“_”。

开发步骤
建议在应用启动后首个activity的onCreate方法中调用getToken方法。
调用getToken方法获取Token。

Java Sample code:

private voID getToken() {    // 创建一个新线程    new Thread() {        @OverrIDe        public voID run() {            try {                // 从agconnect-service.Json文件中读取appID                String appID = AGConnectServicesConfig.fromContext(MainActivity.this).getString("clIEnt/app_ID");                 // 输入token标识"HCM"                String tokenScope = "HCM";                String token = HmsInstanceID.getInstance(MainActivity.this).getToken(appID, tokenScope);                Log.i(TAG, "get token: " + token);                                // 判断token是否为空                if(!TextUtils.isEmpty(token)) {                    sendRegTokenToServer(token);                }            } catch (APIException e) {                Log.e(TAG, "get token Failed, " + e);            }        }    }.start();}private voID sendRegTokenToServer(String token) {    Log.i(TAG, "sending token to server. token:" + token);}

  覆写onNewToken方法,Token发生变化时或者EMUI版本低于10.0以onNewToken方法返回。
说明
  调用getToken方法后获得的Token一定要做判空处理。
  在调用getToken方法外一定要增加异常捕获处理。
Java Sample code:

@OverrIDepublic voID onNewToken(String token) {    // 获取token    Log.i(TAG, "received refresh token:" + token);       // 判断token是否为空    if (!TextUtils.isEmpty(token)) {        refreshedTokenToServer(token);    }}private voID refreshedTokenToServer(String token) {    Log.i(TAG, "sending token to server. token:" + token);}
打开自定义App页面

   intent参数生成。
  在AndroID Studio工程中参考如下代码生成intent。
  Java Sample code:

Intent intent = new Intent(Intent.ACTION_VIEW);// Scheme协议(例如:pushscheme://com.huawei.codelabpush/deeplink?)需要您自定义intent.setData(Uri.parse("pushscheme://com.huawei.codelabpush/deeplink?")); // 往intent中添加参数,用户可以根据自己的需求进行添加参数intent.putExtra("name", "abc");intent.putExtra("age", 180); // 应用必须带上该Flag,如果不添加该选项有可能会显示重复的消息intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top);String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME); // 打印出的intentUri值就是设置到推送消息中intent字段的值Log.d("intentUri", intentUri);

  客户端“AndroIDManifest.xml”文件注册待启动的Activity类。
  参照如下配置注册自定义的Activity,其中host、path、scheme需与步骤1中协议的配置相对应,否则不能跳转到指定的界面。

<activity androID:name=".DeeplinkActivity">    <intent-filter>        <action androID:name="androID.intent.action.VIEW" />        <category androID:name="androID.intent.category.DEFAulT" />        <category androID:name="androID.intent.category.broWSABLE" />        <data            <!-- 下面内容由您自定义-->            androID:host="com.huawei.codelabpush"            androID:path="/deeplink"            androID:scheme="pushscheme" />    </intent-filter></activity>
在自定义Activity类中接收数据。

  Java Sample code:

// 您自定义类,此处DeeplinkActivity只是举例public class DeeplinkActivity extends Activity {    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_deeplink);        Intent intent = getIntent();        if (null != intent) {            // 方法1(参数之间用“&”相连)设置的数据通过如下方式获取            String name1 = intent.getData().getqueryParameter("name");            int age1 = Integer.parseInt(intent.getData().getqueryParameter("age"));            // 方法2(intent直接添加参数)设置的数据通过如下方式获取            String name2 = intent.getStringExtra("name");            int age2 = intent.getIntExtra("age", -1);            Toast.makeText(this, "name " + name1 + ",age " + age1, Toast.LENGTH_SHORT).show();        }    }}
大文本样式

  默认样式下仅支持单行文本,单行文本支持的字数太少,会有表达不全的缺陷。大文本样式支持标题单行,内容文字多行(当前EMUI系统限制最多显示10行中文或者11行英文)。大文本展开后效果如下:

示例报文:

{    "valIDate_only": false,    "message": {        "androID": {            "notification": {                "Title": "message Title",                "body": " message body",                "click_action": {                    "type": 1,                    "intent": "#Intent;compo=com.rvr/.Activity;S.W=U;end"                },                "style": 1,                "big_Title": "the big Title",                "big_body": "the big body"            }        },        "token": [            "pushtoken1"        ]    }}

说明
  EMUI 9: 大文本展开之前显示的标题与内容取自“Title”与“body”字段,非“big_Title”与“big_body”字段的内容。
  EMUI 10: 大文本展开之前显示的标题取自“Title”字段,内容取自“big_body”字段。

inBox样式

  不同于大文本样式,InBox样式除了支持多行文本外可以做到通知消息内容有序展示(序号不会自动生成),如下图所示,文本内容最多可展示5行,每行内容展示不了时后边自动添加“…”。

示例报文:

{    "valIDate_only": false,    "message": {        "androID": {            "notification": {                "Title": "message Title",                "body": " message body",                "click_action": {                    "type": 1,                    "intent": "#Intent;compo=com.rvr/.Activity;S.W=U;end"                },                "style": 3,                "big_Title": "HMS Core SDK 4.0.0 Feature Description",                "inBox_content": [                    "1. Added the function of displaying notification messages on the UI.",                    "2. Added the automatic initialization capability.",                    "3. Added the function of sending messages to web apps.",                    "4. Added the function of sending messages to web apps.",                    "5. Expanded the application scope of the some functions."                ]            }        },        "token": [            "pushtoken1"        ]    }}

说明
  当使用InBox样式时,“inBox_content”数组大小应至少为2,即保证有两条内容,否则建议采用大文本样式。

自定义通知渠道

  通知渠道(channel)是AndroID O版本引入的新功能,意在解决如下问题:
应用的通知越来越多,给用户造成明显打扰。
  华为手机系统EMUI 10.0之前仅有一个“默认通知”渠道,无法做通知消息呈现方式的定制。
  华为手机系统从EMUI 10.0开始新增了三个通知渠道(服务提醒,普通通知与营销通知)来实现不同级别(重要与一般)的通知消息展示。我们也支持应用自定义通知渠道,如何创建自定义渠道安卓官方文档已有非常详细的描述,这里不再赘述。应用想在自定义渠道上展示消息,只需要通过服务端消息请求报文中“message.androID.notification.channel_ID”字段设置为要使用的渠道标识即可。消息最终能否展示在应用渠道上,受用户终端上该渠道是否创建以及渠道的开关策略控制。
  说明
  自定义通知渠道仅对发送给用户设备的重要级别消息有效,一般级别消息仍然通过华为营销通知渠道展示。
示例报文:

{    "message": {        "notification": {            "Title": "message Title",            "body": "message body"        },        "androID": {            "notification": {                "icon": "/raw/ic_launcher2",                "sound": "/raw/shake",                "channel_ID": "RingRing",                "click_action": {                    "type": 2,                    "url": "https://example.com"                }            }        },        "token": [            "pushtoken1"        ]    }}
总结

以上是内存溢出为你收集整理的Android ~ 集成华为推送全部内容,希望文章能够帮你解决Android ~ 集成华为推送所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1056584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存