智能客服
你问我答,随时在线为你解决问题
此版本文档已归档不再维护,推荐您使用最新版本。
针对AndroidStudio开发环境,华为提供了maven仓集成方式的WalletKit SDK包。在开始开发前,您需要将WalletKit SDK集成到您的AndroidStudio开发环境中:
在AndroidStudio开发环境中添加当前应用的AppGallery Connect配置文件。
配置HMS SDK的maven仓地址。
添加编译依赖。
步骤1:登录 AppGallery Connect 网站,选择“我的应用”。
步骤2:在名称列表中找到应用所在的产品,点击对应的“Android应用”链接。

步骤3:选择“开发 > 概览”。
步骤4:单击“应用”栏下的“agconnect-service.json”下载配置文件。
步骤5:将agconnect-service.json文件拷贝到项目级根目录下。

----结束
步骤1:打开AndroidStudio项目级build.gradle文件。

步骤2:在allprojects ->repositories里面配置HMS SDK的maven仓地址。
- allprojects {
- repositories {
- google()
- jcenter()
- maven {url 'https://developer.huawei.com/repo/'}
- }
- }
步骤3:在buildscript->repositories中配置HMS SDK的maven仓地址。
- buildscript {
- repositories {
- google()
- jcenter()
- maven {url 'https://developer.huawei.com/repo/'}
- }
- }
步骤4:在buildscript -> dependencies里面增加配置。
- buildscript {
- dependencies {
- classpath 'com.huawei.agconnect:agcp:1.2.1.301'
- }
- }
*注:maven仓地址直接在浏览器中打开无法访问,只能在IDE中配置。
----结束
步骤1:打开应用级的build.gradle文件。

步骤2:在“dependencies” 中添加如下编译依赖。
- dependencies {
- implementation 'com.huawei.hms:wallet:{version}'
- }
*注:{version} 替换为实际的SDK版本号,如:implementation 'com.huawei.hms:wallet:4.0.2.300'。
步骤3:在文件头添加配置。
- apply plugin: 'com.huawei.agconnect'
----结束
重新打开修改完的“build.gradle”文件,右上方出现“Sync Now”链接。单击“Sync Now”等待同步完成。

如果出现错误,请检查网络连接是否正常,以及检查gradle文件是否正确。
如果您的应用不需要设置只支持某些特定语言,则请忽略本步骤。应用将默认支持所有HMS SDK支持的语言。
如果您的应用需要设置只支持某些特定语言,则可通过本步骤配置。
打开应用级根目录的“build.gradle”文件。
在“android>defaultConfig”中新增“resConfigs”配置,“en”(英语) 和 “zh-rCN”(简体中文)为必须配置的语种,配置格式如下:
- android {
- defaultConfig {
- ...
- resConfigs "en", "zh-rCN", "需要支持的其他语言"
- }
- }
HMS SDK支持的语言列表请参考HMS SDK支持的语言。
针对Eclipse开发环境,华为提供了下载HMS SDK包本地集成的方式。在开始开发前,您需要将HMS SDK集成到您的Eclipse开发环境中。
步骤1:下载HMS Base SDK和WalletKit SDK,并解压zip包。
下载地址请参见:Eclipse SDK下载
步骤2:将所有SDK工程导入到您的工作空间。
选择菜单“File > Import”,再选择“Android > Existing Android Code Into Workspace”,单击“Next”。

单击“Browse”,选择工程所在的文件夹。在“Projects”下显示待导入的工程,默认全部勾选,单击“Finish”。
*注:待导入的工程必须和工作空间在相同的磁盘空间里,例如都在“D:\”。如果不在,您可以选择“Copy projects into workspace”,将工程文件复制到工作空间。

步骤3:将WalletKit SDK的jar文件导入您的工作空间中。
在您的工作空间新建libs目录,并将WalletKit SDK放入libs目录中。

右键您的工程选中Build Path-->Add Libraries,选中User Library。

新建User Library名称。

点击Add JARs...,并选中之前导入libs下的jar文件。

点击Finish即完成了WalletKit SDK的jar文件导入。
----结束
步骤1:右键单击您的工程,选择“Properties”。
步骤2:在左侧选择“Android”,单击“Add”,选择已导入空间的工程,单击“Apply and Close”。

步骤3:由于Eclipse的xml文件不支持$符号,将HMSSdkBase和Agconnect-core工程下AndroidManifest.xml文件中的“${applicationId}”替换成您的应用包名。
- <application>
- <provider
- android:name="com.huawei.agconnect.core.provider.AGConnectInitializeProvider"
- android:authorities="${applicationId}.AGCInitializeProvider"
- android:exported="false" />
- <service
- android:name="com.huawei.agconnect.core.ServiceDiscovery"
- android:exported="false" />
- </application>
----结束
将HMSSdkBase工程中assets目录下的资源文件拷贝到您的工程中assets目录下。

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

开发者编译APK前需要配置不要混淆HMS SDK,避免功能异常。
步骤1:打开Android工程的混淆配置文件。
步骤2:加入排除HMS SDK的混淆配置。
- -ignorewarning
- -keepattributes *Annotation*
- -keepattributes Exceptions
- -keepattributes InnerClasses
- -keepattributes Signature
- -keepattributes SourceFile,LineNumberTable
- -keep class com.hianalytics.android.**{*;}
- -keep class com.huawei.updatesdk.**{*;}
- -keep class com.huawei.hms.**{*;}
步骤3:如果开发者使用了AndResGuard,需要在混淆配置文件中加入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*"
----结束
步骤1:创建你的会员卡对象。
具体设置项请见开发者API文档,示例代码不一一列举:
注:生成用户特有信息的实例前请先将模板推送至华为服务器,并在用户特有信息的实例中传入模板唯一标识PassStyleIdentifier。
- PassObject.Builder passBuilder = PassObject.getBuilder();
- passBuilder.setStatus(status)
- .setOrganizationPassId(cardNumber)
- .setPassStyleIdentifier(mPassStyleIdentifier.getText().toString())
- .setPassTypeIdentifier(typeId)
- .setSerialNumber(serinumber)
- .addAppendFields(appendFields)
- .addCommonFields(commonField)
- .passBuilder.addLocationList(locationList)
- .addImageList(imageList)
- //生成会员卡对象
- PassObject passObject = passBuilder.build();
步骤2:将对象转化为JWE。
开发者需要在自己后台服务器提供将会员卡对象JSON转化为JWE格式的功能,具体实现样例代码如下:
- // 在华为AppGallery Connect网站上注册的应用ID。
- String appId = "Replace with your app ID";
- //生成一个新的实例并将其绑定到用户
- String newInstanceJson = passObject.toJson();
- JSONObject newInstanceJsonObject = JSONObject.parseObject(newInstanceJson);
- newInstanceJsonObject.put("iss", appId);
- //生成会话密钥以加密有效载荷数据。 会话密钥是一串随机的十六进制数字。
- String sessionKey = RandomUtils.generateSecureRandomFactor(16);
- System.out.println("sessionKey: " + sessionKey);
- //华为固定的公开密钥,用于加密会话密钥。
- String sessionKeyPublicKey = "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAgBJB4usbO33Xg5vhJqfHJsMZj44f7rxpjRuPhGy37bUBjSLXN+dS6HpxnZwSVJCtmiydjl3Inq3Mzu4SCGxfb9RIjqRRfHA7ab5p3JnJVQfTEHMHy8XcABl6EPYIJMh26kztPOKU2Mkn6yhRaCurhVUD3n9bD8omiNrR4rg442AJlNamA7vgKs65AoqBuU4NBkGHg0VWWpEHCUx/xyX6hIwqc1aD7P2f62ZHsKpNZBOek/riWhaVx3dTAa9ZS+Av3IGLOZiplhYIow9f8dlWyqs8nff9FZoJO03QhXLvOORT+lPAkW6gFzaoeMaGb40HakkZn3uvlAEKrKrtR0rZEok+N1hnboaAu8oaKK0rF1W6iNrXcFrO0rcrCsFTVF8qCa/1dFmIXwUd2M6cUzT9W0YkNyb6ZBbwEhjwBL4DNW4JfeF2Dzj0eZYlSuYV7e7e1e+XEO8lwPLAiy4bEFAWCaeuDVIhbIoBaU6xHNVQoyzct98gaOYxE4mVDqAUVmhfAgMBAAE=";
- //您在AGC上申请服务时生成了一对密钥。在此使用该私钥。
- String jweSignPrivateKey = "Replace with your private key.";
- //生成JWE
- String jweStrByInstanceIds = JweUtil.generateJwe(sessionKey, jweSignPrivateKey,newInstanceJsonObject.toJSONString(), sessionKeyPublicKey);
- //编码
- String contentStr = URLEncoder.encode(jweStrByInstanceIds, StandardCharsets.UTF_8.toString())
步骤3:创建CreateWalletPassRequest。
- CreateWalletPassRequest request = CreateWalletPassRequest.getBuilder()
- .setContent(jwtStr)
- .build();
步骤4:创建Client实例。
- WalletPassClient walletObjectsClient = Wallet.getWalletPassClient(PassTestActivity.this);
步骤5:创建Task。
- Task<AutoResolvableForegroundIntentResult> task = walletObjectsClient.createWalletPass(request);
步骤6:执行Task。
- // Save_flag为任务执行标志,用于接收任务执行结果。
- ResolveTaskHelper.excuteTask(task, XXXActivity.this, SAVE_FLAG);
步骤7:接收添加会员卡结果。
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- //SAVE_FLAG为步骤6设置的常量值
- case SAVE_FLAG:
- switch (resultCode) {
- case Activity.RESULT_OK:
- Toast.makeText(this, "save success", Toast.LENGTH_LONG).show();
- break;
- case Activity.RESULT_CANCELED:
- Toast.makeText(this, "cancel by user", Toast.LENGTH_LONG).show();
- break;
- default:
- if (data != null) {
- int errorCode =
- data.getIntExtra(
- WalletCommonConstants.EXTRA_ERROR_CODE, -1);
- Toast.makeText(this, "fail, [" + errorCode + "]:" + errorCode, Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(this, "fail:data is null", Toast.LENGTH_LONG).show();
- }
- break;
- }
- }
- }
----结束。