目录

本章节主要介绍接入华为Push的准备步骤,以帮助开发者更快速的完成华为推送服务的接入。

必备步骤主要包括:

1、AppGallery Connect配置

2、集成HMS SDK

3、配置manifest文件

4、配置混淆脚本

1. AppGallery Connect配置

在开始开发应用前,需要在AppGallery Connect中配置相关信息。

1.1 注册成为开发者

在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法可参考帐号注册认证。

1.2 创建应用

参见创建项目和在项目下创建应用完成应用的创建,配置如下:

1.3 生成签名证书指纹

签名证书指纹用于在通过华为HMS SDK调用HMS Core(APK)时,校验应用的真实性。开发者在使用HMS Core(APK)前必须将签名证书指纹配置到AppGallery Connect的,在配置前需要根据签名证书在本地生成签名证书指纹。

在申请前需要满足以下2个条件:

操作步骤如下:

1. 打开命令行工具(使用CMD命令),执行cd命令进入keytool.exe所在的目录(图中样例为PC上java程序安装在C盘的Program Files (x86)目录)。

 

2. 执行命令keytool -list -v -keystore <keystore-file>,按命令行提示进行操作。

<keystore-file>为应用签名文件的完整路径。

例如:

  1. >keytool -list -v -keystore E:\HmsSample\android.keystore

3. 获取对应的SHA256指纹。

1.4 配置签名证书指纹

1. 登录AppGallery Connect网站,选择“我的项目”。

2. 在项目列表中找到您的项目,在项目中单击需要配置签名证书指纹的应用。

3. 在“项目设置”页面的“应用”区域,将“SHA256证书指纹”配置为生成签名证书指纹步骤中生成的SHA256指纹。

4. 配置完成后点击,大约15分钟后生效。

1.5 设置数据存储位置

开发者使用Push Kit需要设置数据存储位置,如果不设置,基于主题、WebPush和iOS的发送功能将不可用。如果设置的数据存储位置与开发者的服务器位置不一致,或者设置的数据存储位置与应用所服务的用户所在地不一致,都会导致推送消息下发时延增加。为了减少下发消息在全球各大区之间跳转导致的时延,建议开发者按照您的应用所服务的用户所在地来设置对应的数据存储位置。例如:如果您是拉美的开发者,您所服务的用户大部分在拉美,建议将您的数据存储地设置在新加坡;如果您是中国大陆的开发者,但是您所服务的用户大部分在欧洲,建议将您的数据存储地设置在德国。

1.6 打开相关服务

a. 打开Push服务开关。

具体操作步骤请参见打开服务开关。

b. 配置推送服务参数。

具体操作步骤请参见配置推送服务参数。

2. 集成HMS Core SDK

2.1 在Android Studio项目中集成HMS Core SDK

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

添加应用的AppGallery Connect配置文件

a. 登录 AppGallery Connect 网站,选择“我的项目”。

b. 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。

c. 在“项目设置”页面中,单击“应用”栏下的“agconnect-services.json”下载配置文件。

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

配置HMS Core SDK的maven仓地址

a. 打开AndroidStudio项目级“build.gradle”文件。

b. 在allprojects ->repositories里面配置HMS Core SDK的maven仓地址。

  1. allprojects {
  2.    repositories {
  3.        google()
  4.        jcenter()
  5.        maven {url 'https://developer.huawei.com/repo/'}
  6.    }
  7. }

c. 在buildscript ->repositories里面配置HMS Core SDK的maven仓地址。

  1. buildscript {
  2.    repositories {
  3.        google()
  4.        jcenter()
  5.        maven {url 'https://developer.huawei.com/repo/'}
  6.    }
  7. }

d. 在buildscript -> dependencies里面增加配置。

  1. buildscript {
  2.    dependencies {
  3.        classpath 'com.huawei.agconnect:agcp:1.3.1.300'
  4.    }
  5. }
说明:
maven仓地址直接在浏览器中打开无法访问,只能在IDE中配置。

添加编译依赖

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

b. 在“dependencies”中添加如下编译依赖。

  1. dependencies {
  2.     //其它已存在的依赖不要删除
  3.     implementation 'com.huawei.hms:push:{version}'
  4. }
说明:
{version} 替换为实际的SDK版本号,如:implementation 'com.huawei.hms:push:4.0.4.301'。

c. 在应用级“build.gradle”文件头添加配置。

  1. apply plugin: 'com.huawei.agconnect'

配置签名

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

  1. android {
  2.     signingConfigs {
  3.         config {
  4.             keyAlias 'xxx'
  5.             keyPassword '123456'
  6.             storeFile file('xxx.jks')
  7.             storePassword '123456'
  8.         }
  9.     }
  10.     buildTypes {
  11.         debug {
  12.             signingConfig signingConfigs.config
  13.         }
  14.         release {
  15.             signingConfig signingConfigs.config
  16.             minifyEnabled false
  17.             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  18.         }
  19.     }
  20. }

同步工程

修改完的build.gradle文件,右上方出现Sync Now链接,点击“Sync Now”等待同步完成。

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

多语言设置

●  如果您的应用不需要设置只支持某些特定语言,则请忽略本步骤。应用将默认支持所有HMS Core SDK支持的语言。

●  如果您的应用需要设置只支持某些特定语言,则可通过本步骤配置。

打开应用级根目录的“build.gradle”文件。

在android->defaultConfig中新增resConfigs配置,en(英语) 和 zh-rCN(简体中文)为必须配置的语种,配置格式如下:

  1. android {
  2.        defaultConfig {
  3.                ...
  4.                resConfigs "en", "zh-rCN", "需要支持的其他语言"
  5.        }
  6. }

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

2.2 在Eclipse项目中集成HMS Core SDK

针对Eclipse开发环境,华为提供了下载HMS Core SDK包本地集成的方式。在开始开发前,您需要将HMS Core SDK集成到您的Eclipse开发环境中。

下载SDK

1. 点击这里下载HMS Base SDK和要集成的服务SDK,并解压zip包。

2. 将所有SDK工程导入到您的工作空间。

    a. 选择菜单“File > Import”,再选择“Android > Existing Android Code Into Workspace”,单击“Next”。

    b. 单击“Browse”,选择工程所在的文件夹目录。在“Projects”下显示待导入的工程,默认全部勾选,单击“Finish”。

说明:
待导入的工程必须和工作空间在相同的磁盘空间里,例如都在“D:\”。如果不在,您可以选择“Copy projects into workspace”,将工程文件复制到工作空间。


添加工程依赖关系

1. 右键单击您的工程,选择“Properties”。

2. 在左侧选择“Android”,单击“Add”,选择已导入空间的工程,单击“Apply and Close”。

3. 右键单击HMSSdkAvailableUpdate工程,选择“Properties”。

4. 在左侧选择“Android”,单击“Add”,选择HMSSdkUI工程,单击“Apply and Close”。

5. 由于Eclipse的xml文件不支持$符号,将HMSSdkAvaliableUpdate和Agconnect-core等工程下AndroidManifest.xml文件中的“${applicationId}”替换成您的应用包名。

  1. <application>
  2.    <provider
  3.        android:name="com.huawei.agconnect.core.provider.AGConnectInitializeProvider"
  4.        android:authorities="${applicationId}.AGCInitializeProvider"
  5.        android:exported="false" />
  6.    <service
  7.        android:name="com.huawei.agconnect.core.ServiceDiscovery"
  8.        android:exported="false" />
  9. </application>

拷贝HMSSdkStats资源文件到您的工程目录

将HMSSdkStats工程中assets目录下的资源文件拷贝到您的工程中assets目录下。

说明:

如果依赖其他的kit资源,还需要复制对应kit的资源文件到您的工程目录下。

配置工程project.properties文件

打开您的工程的project.properties文件,添加如下代码,用于合并子工程中的Manifest文件。

  1. manifestmerger.enabled=true
说明:
ADT必须是17以上版本。

添加当前应用的AppGallery Connect配置文件

1. 登录 AppGallery Connect 网站,单击“我的项目”。

2. 在项目列表中找到您的项目,在项目中单击需要集成HMS Core SDK的应用。

3. 在“项目设置 > 常规”页面的“应用”区域,单击“agconnect-services.json”下载配置文件。

4. 由于Eclipse不支持agcp插件,您需要将“agconnect-services.json”文件放置到您的工程assets目录下,并且在工程的Application子类中添加如下代码。如果工程没有Application子类,则需要您新建一个从Application继承的子类,例如新建MyApplication类。

  1. public class MyApplication extends Application{
  2.    @Override
  3.    public void onCreate() {
  4.        super.onCreate();
  5.    }
  6.    // TODO: Add the following code:
  7.    @Override
  8.    protected void attachBaseContext(Context context) {
  9.        super.attachBaseContext(context);
  10.        AGConnectServicesConfig config = AGConnectServicesConfig.fromContext(context);
  11.        config.overlayWith(new LazyInputStream(context) {
  12.            public InputStream get(Context context) {
  13.                try {
  14.                    return context.getAssets().open("agconnect-services.json");
  15.                } catch (IOException e) {
  16.                    return null;
  17.                }
  18.            }
  19.        });
  20.    }
  21.    // TODO: End
  22. }

添加代码后需要导入以下类:

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import com.huawei.agconnect.config.AGConnectServicesConfig;
  4. import com.huawei.agconnect.config.LazyInputStream;
  5. import android.app.Application;
  6. import android.content.Context;
  7. import android.util.Log;

5. 打开您的工程AndroidManifest.xml文件,在“application”模块中添加Application子类名称,如果已经添加,则跳过此步骤。例如,添加MyApplication类名称。

  1. <application
  2.    android:name=".MyApplication"
  3.    …
  4.    >
  5. …

6. 在Eclipse菜单栏中点击“Project”,执行“Clean”操作,即完成SDK集成。

3. 配置manifest.xml文件

集成最新的HMS Core Push SDK版本后要在AndroidManifest.xml文件的application节点下参照以下步骤注册Service,用于接收华为推送的消息与令牌。

注册YourHmsMessageService:

YourHmsMessageService类需要开发者自己定义,继承于com.huawei.hms.push.HmsMessageService类并实现其中的方法。

  1. <service
  2.      android:name=".YourHmsMessageService"
  3.      android:exported="false">
  4.      <intent-filter>
  5.            <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
  6.      </intent-filter>
  7. </service>
注意:
exported属性需要设置为false。

4. 配置混淆脚本

开发者编译APK前需要配置不要混淆HMS SDK,避免功能异常。

Android Studio开发环境里的配置文件是“proguard-rules.pro”,Eclipse开发环境里的配置文件是“proguard-project.txt”。

1. 打开Android工程的混淆配置文件。

2. 加入排除HMS SDK的混淆配置。

  1. -ignorewarnings
  2. -keepattributes *Annotation*
  3. -keepattributes Exceptions
  4. -keepattributes InnerClasses
  5. -keepattributes Signature
  6. -keepattributes SourceFile,LineNumberTable
  7. -keep class com.hianalytics.android.**{*;}
  8. -keep class com.huawei.updatesdk.**{*;}
  9. -keep class com.huawei.hms.**{*;}

3. 如果开发者使用了AndResGuard,需要在混淆配置文件中加入AndResGuard允许清单。

  1. "R.string.hms*",
  2. "R.string.connect_server_fail_prompt_toast",
  3. "R.string.getting_message_fail_prompt_toast",
  4. "R.string.no_available_network_prompt_toast",
  5. "R.string.third_app_*",
  6. "R.string.upsdk_*",
  7. "R.layout.hms*",
  8. "R.layout.upsdk_*",
  9. "R.drawable.upsdk*",
  10. "R.color.upsdk*",
  11. "R.dimen.upsdk*",
  12. "R.style.upsdk*",
  13. "R.string.agc*"