01/10/2025 10:53:04

接入教程(鸿蒙)

Release note:

日期 版本号 更新说明 备注
12.17 5.38.101 解决 UE418 打开 webview 崩溃问题
添加测试环境提示框
引擎脚本自动依赖 msdkoaid 插件
更新 tpns SDK 1.0.5
去掉 abc 文件的调试信息
12.06 5.38.101 支持判断 QQ、微信是否安装(仅支持在应用主线程调用
webview 优化、支持跳转 WeChat 支付
支持获取 OAID
注意:
1. 微信配置的改动(7.5.4 部分
2. 默认接入 OAID,不需要的自行剔除
3. OAID 权限需要业务获取,对应的权限声明也要业务加载权限清单里
11.29 5.38.100 更新灯塔 SDK,支持上报 appVersion
更新 PixUI SDK
支持配置 QQ 登录方式为账密登录
优化同步方法调用逻辑
支持工具模块
10.29 5.38.100 xg 插件更新 tpns sdk 1.03 版本(解决推送 crash)
10.25 5.38.100 支持 QQ 登录(qq 扫码和 qq 客户端授权),原帐密和扫码登录功能下掉
webview 增加关闭回调
支持未成年人登录控制(接入前请联系 MSDK 产品)
10.17 - 支持微信登录
10.12 - webview 的工具栏功能补齐,横竖屏支持,webview 支持左滑退出
解决 QQ 登录时,输入密码时超时问题
更新 tpns 库
插件动态库包体积优化
09.18 - 解决 env 被其他线程使用导致的问题
09.12 - 更新 tpns sdk,解决 xg 在 ue 引擎中启动崩溃问题
删除 QQ 网页登录功能,支持的 QQ SDK 扫码和账密登录

一、 MSDK鸿蒙版本说明

1.1 版本下载:

UE 引擎: GCloudUE_2.2.19.0_hms_dev-20241217.zip

Unity & 团结 引擎: GCloudUnity_2.2.19.0_hms_dev-20241217.zip

其他 引擎: GCloudUE_2.2.19.0_hms_dev-20241217.zip

1.2 最低版本要求

  • 鸿蒙 API 12
  • IDE 版本需要更新到最新

1.3 支持的功能

功能陆续补齐中...

  • 登录模块:支持的功能:自动登录、游客登录、获取登录态、重置游客、qq 登录、微信登录
  • 好友模块:不支持
  • 分享模块:不支持
  • 群组模块:不支持
  • 公告模块:支持
  • 推送模块:支持的插件:XG
  • 事件上报模块:支持的插件:Beacon
  • 异常上报模块:支持的插件:Bugly
  • WebView模块:支持的功能:打开网页、获取加密票据、中控逻辑、工具栏、横竖屏,部分js调native功能(参考7.6部分)
  • 位置模块:不支持
  • 工具模块:支持
  • 扩展模块:不支持

1.4 依赖的组件 重要!!!

MSDK 依赖 GCloudCore、PixCore、PxEmbed、PluginCrosCurl,因此接入 MSDK 时,需要带上这些组件。

1.5 插件版本

整包中可以查看每个插件的版本号。

二、开发机本地环境搭建

2.1 DevEco-Studio 环境搭建

下载安装 鸿蒙 DevEco Studio

2.2 团结引擎环境搭建

2.2.1 官网下载团结引擎

推荐通过团结 Hub 下载。

2.2.2 配置团结引擎使用的 SDK

在下载安装 鸿蒙 DevEco Studio,将 mac 下 DevEco Studio.app/Contents/sdk/HarmonyOS-NEXT-DB2/openharmony(windows 目录:DevEco Studio\sdk\HarmonyOS-NEXT-DB2\openharmony)目录拷贝出来放到一个新创建的目录(作为团结引擎使用的 sdk 目录),并将 openharmony 文件夹名字修改成 12(sdk api的版本,注意这里名字随 sdk api 变化而变化)。

在团结引擎中,打开设置,选择 “External Tools” 条目,配置 OpenHarmony SDK、Node.js SDK、JDK 路径,其中 OpenHarmony SDK 路径选择上面创建好的 “12” 这个目录。

2.3 UE 引擎环境搭建

找华为的人拿支持鸿蒙 API12 的 UE 引擎。

三、原生接入 MSDK

MSDK 环境配置:参考 MSDKV5 文档

3.1 ets 层

  • 入口 Ability(如:TuanjiePlayerAbility(团结引擎),UnityPlayerAbility(unity 引擎),UE 引擎脚本已处理)中,初始化 MSDK,注意 import 时引入的 MSDKPIXCore 一定要小写(跟 dependencies 中的名字保持一致)

  • 在 entry module 中,修改 build-profile.json5,将插件名(这里仅填入了 webview 的插件名,实际需要填入业务需要接入的所有 MSDK 插件名,以及 pxembed 库。!!! 不要漏了,不然出各种问题)填入(注意这里是 buildOption 中

  • 在 entry module 中,修改 src/main 目录下的 module.json5,添加网络权限

  • 在工程的 oh-package.json5 文件中,将 MSDK 的插件包加上依赖(其中路径填写 har 包存放的路径

  • 在工程的 oh-package.json5 文件中(注意不是 entry 中的),将 msdkpixcore 路径填入 overrides 中(其中路径填写 har 包存放的路径

  • 在工程级的 build-profile.json5 文件中(注意不是 entry 中的),添加 useNormalizedOHMUrl 属性(注意这个属性只有 api12 及以上才有

  • 将整包中 Plugins/OpenHarmony/MSDKPIXCore/raw(或者 rawfile 文件夹)文件夹下的所有文件,拷贝到工程中 entry 中 /src/main/resoources/rawfile 目录下(注意不要将文件夹(raw/rawfile)也拷贝了

整包

工程

3.2 c#、c++层

参照 MSDKV5 接入文档:集成指南 · MSDK Developer Reference

如需使用 c++ 接口,则需要使用 ue其他引擎整包,里面携带了头文件。

四、团结引擎接入 MSDK

4.1 MSDK 集成和工程导出

  1. 整包资源:可以从 GCloud(较新)获取,也可以从 1.1 中获取
  2. 将 GCloudUnity.zip 解压,将其拷贝到团结引擎工程的 Assets 目录下
  3. 将 Plugins/OHOS_HAR/GCloud 中的文件移动到 OpenHarmony 文件夹中
  4. 通过团结引擎导出工程,将 TuanjiePlayerAbility.ts 文件的后缀修改为 ets
  5. 对导出工程进行配置,可参考本文档第 3 部分内容

4.2 MSDK api 调用

api 文档可参照:客户端API · MSDK Developer Reference

4.3 团结引擎 Demo 工程介绍

Demo 工程微盘路径(后续持续更新,压缩包名携带时间):MSDK 鸿蒙版本团结引擎 Demo

  1. MSDK c# 接口
  2. demo 中登录、公告、webview 的 API 调用示例(后续持续更新
  3. sdk 资源包,如下图所示

注意:

  • Demo 工程暂时需要导出鸿蒙工程,然后通过鸿蒙工程直接将 Demo 运行在鸿蒙手机上
  • 这里 Demo 工程导出为鸿蒙工程后,无需像第 3 部分内容中配置工程了(已经通过脚本进行修改了)

五、UE 引擎接入 MSDK

MSDK 以 UE 插件的形式提供 SDK,除 MSDKPIXCore,其它插件按需集成。每个插件存在各自特有的配置,集成其他插件的时候,请按照插件要求添加相应的配置。以下提供 UE 引擎的接入指引,适配最新的 API 12, 验证引擎 UE 4.26.2(支持鸿蒙的 UE 引擎,请联系鸿蒙同学获取引擎)。

5.1 资源下载与集成

  1. 在微盘获取 UE 资源,通常以 GCloud 整包格式提供(1.1 中获取链接)

整包中已经包含包括 MSDKPIXCore、MSDKPIXQQ、MSDKPIXWebView、MSDKPIXBugly、MSDKPIXXG、MSDKPIXBeacon 等 6 个 UE 插件。其中,MSDKPIXXG、MSDKPIXBeacon 两个插件在 UE 引擎上暂未验证通过,可以等验证通过后,再集成二者。另外,GCloud、GCloudCore 为其它组件包括 MSDK 的依赖插件,需要一并集成。

解压后,请将GCloud、GCloudCore、MSDKPIXCore、其他组件拷贝到 UE 引擎的插件目录。拷贝后的示例应如下:

其中,MSDKPixDev426 是工程目录,Plugins 为 UE 插件目录。然后,用 UE 引擎打开工程,编译 OpenHarmony 平台。如下示例:

5.2 MSDK 配置

MSDKPIXCore 是 MSDK 核心框架层,通过 MSDKConfig.ini 文件进行配置,具体配置项可以参考原生接入。MSDKConfig.ini 文件随MSDKPIXCore 一同发布,具体路径在 “MSDKPIXCore\Source\MSDKPIXCore\lib\Harmony\rawfile” 下面,如下示例:

各种 MSDK 相关的配置,如调试开关、服务器地址等在这里配置。QQ 扫码登录、Bugly 上报,这两个功能相应的配置也在 MSDKConfig.ini 中,请参考原生接入文档,完善其中的配置。相应功能,UE 中暂无需特殊操作。

5.3 功能示例

MSDK 当前支持游客登录、QQ 扫码登录、WebView 打开网页、Bugly 上报等。调用步骤与原生步骤类似,首先定义和实现 Observer,然后将 Observer 设置到 MSDK,随后,在需要的地方调用 MSDK 的接口,最后,在 Observer 中处理 MSD K的回调。对于 Bugly,当前仅支持崩溃日志上报,集成并配置后,MSDK 会自动初始化 Bugly,Bugly 后台查看统计数据。以下是这几个功能在UE中的调用示例,可以参考:

5.3.1 定义&实现 Observer

/*
* Observer for login, the methoids OnLoginRetNotify and OnBaseRetNotify should be implemented
*/
class ULoginObserver : public MSDKLoginObserver {

    virtual void OnLoginRetNotify(const MSDKLoginRet& loginRet) 
    {
        GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, loginRet.retMsg.c_str());
    };

    virtual void OnBaseRetNotify(const MSDKBaseRet& baseRet) 
    {
        GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, baseRet.retMsg.c_str());
    };
};

5.3.2 设置 Observer 到 MSDK

ULoginObserver ueObserver;
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, TEXT("Set Observer..."));
MSDKLogin::SetLoginObserver(&ueObserver);

5.3.3 调用接口

// 游客登录
void UMSDKUserWidgetBase::GuestLogin()
{
    GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, TEXT("GuestLogin..."));
    MSDKLogin::Login("Guest");
}
// QQ扫码登录
void UMSDKUserWidgetBase::QrLogin()
{
    GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, TEXT("QrLogin..."));
    MSDKLogin::Login("QQ", "", "WebView");
}
// 打开WebView
void UMSDKUserWidgetBase::OpenWebView()
{
    GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, TEXT("OpenWebView..."));
    MSDKWebView::OpenUrl("https://www.google.com/");
}
// 获取Encoded Url
void UMSDKUserWidgetBase::GetURLEncoded()
{
    GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, TEXT("GetURLEncoded..."));
    std::string  urlEncoded = MSDKWebView::GetEncodeUrl("https://www.google.com/");
    GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, urlEncoded.c_str());
}

5.4 其他

  • 鸿蒙 bugly 控制台:https://bugly.woa.com/v2/workbench/apps
  • 与 GCloud 一起集成的时候,注意保证先初始 GCloud
  • 由于引擎限制,可能运行时找不到插件的问题,必要时加 strictMode 标签
  • 遇到集成编译问题可以及时联系 MSDK 同学

六、其他引擎接入 MSDK

整包资源:1.1 中获取。

6.1 导入依赖

6.1.1 拷贝对应 SDK 资源

  1. 导入 GCloudCore 插件依赖:将 /GCloudCore/Source/GCloudCoreLib/OpenHarmony 目录下的 har 包拷贝到 entry/libs 目录下,将rawfile目录下的文件拷贝到 entry/src/main/resources/rawfile 目录下
  2. 导入 MSDK 插件依赖:将游戏所需要的 MSDK 插件(如 MSDKPIX{插件名})中的 /MSDKPIX{插件名}/Source/MSDKPIX{插件名}/lib/OpenHarmony 目录下的 har 包拷贝到 entry/libs 目录下,将rawfile目录下的文件拷贝到 entry/src/main/resources/rawfile 目录下
  3. 导入 PixCore 依赖:将 /PixCore/Source/PixCore/ThirdParty/Libraries/OHOS 目录下的 har 包拷贝到 entry/libs 目录下,将so文件拷贝到 entry/libs/${abi} 目录下(注意这里 abi 指的是 arm64-v8a、x86_64 等等),如:

  1. 导入 PixEmbed 依赖:将 /PixEmbed/Source/PixEmbed/ThirdParty/Libraries/OHOS 目录下的 har 包拷贝到 entry/libs 目录下
  2. 导入 PluginCrosCurl 依赖:将 /PluginCrosCurl/Source/PluginCrosCurl/lib/OpenHarmony 目录下的 har 包拷贝到 entry/libs 目录下

6.1.2 添加依赖配置

在工程级的 on-package.json5 将上述拷贝过来的 har 包进行依赖配置

注意:
  1. 其中只添加了两个 MSDK 插件(msdkpixcore.har、msdkpixqq.har),如果游戏需要接入多个 MSDK 插件,则都需要添加到依赖配置中
  2. overrides 中需要配置 msdkpixcore 和 pxembed 两个库
  3. 这里 dependencise 和 overrides 中的 key 都是 小写

6.2 注册 GCloud 声明周期

6.2.1 在启动 Ability(如 EntryAbility.ets)文件中添加下面的代码

这里代码是用于注册 GCloud 生命周期

注意:这里 11~14 行仅仅添加了 MSDK 和 MSDK 所需要的库的生命周期注册,如果游戏需要集成其他 SDK 库,则参照其 SDK 规则自行添加
import { GCLifecycleDispatch } from 'gcloudcore';

class GCLifecycleImport {
  static instance: GCLifecycleImport = new GCLifecycleImport();
  importFinished:boolean;
  private constructor() {
    hilog.info(0x0000, "GCLifecycleImport", 'GCLifecycleDispatch: GCLifecycleImport constructor');
    this.importFinished = false;
    (async () => {
      hilog.info(0x0000, "GCLifecycleImport", 'GCLifecycleDispatch: addObserver start');
      GCLifecycleDispatch.GetInstance().addObserver(await import('plugincroscurl'));
      GCLifecycleDispatch.GetInstance().addObserver(await import('gpixui'));
      GCLifecycleDispatch.GetInstance().addObserver(await import('msdkpixcore'));
      GCLifecycleDispatch.GetInstance().addObserver(await import('gcloudcore'));
      hilog.info(0x0000, "GCLifecycleImport", 'GCLifecycleDispatch: addObserver finish');
      this.importFinished = true;
    })();
  }
}

6.2.2 在启动 Ability(如 EntryAbility.ets)的生命周期函数中,添加 GCloud 生命周期分发函数调用

在 onCreate、onNewWant、onDestroy、onWindowStateCreate、onWindowStageDestroy、onForegroud、onBackgroud 生命周期函数中调用

GCLifecycleDispatch.GetInstance().onCreate(this.context, want, launchParam)
GCLifecycleDispatch.GetInstance().onNewWant(want, launchParam)
GCLifecycleDispatch.GetInstance().onDestroy()
GCLifecycleDispatch.GetInstance().onWindowStateCreate(windowStage)
GCLifecycleDispatch.GetInstance().onWindowStageDestroy()
GCLifecycleDispatch.GetInstance().onForegroud()
GCLifecycleDispatch.GetInstance().onBackgroud()

6.3 使用 MSDK c++ 接口

api 文档可参照:客户端API · MSDK Developer Reference

6.4 CMake链接MSDKPIXCore动态库

MSDK C++ 接口的符号都在 msdkpixcore 中,因此需要业务自己链接 msdkpixcore。

6.4.1 添加动态库寻找路径

if(DEFINED PACKAGE_FIND_FILE)
    include(${PACKAGE_FIND_FILE})
endif()

6.4.2 链接动态库

注意这里 msdkpixcore 的大小写
target_link_libraries(xxx msdkpixcore::MSDKPIXCore) # 此处的xxx是业务自己的动态库名字

6.4.3 头文件位置

将头文件拷贝到游戏工程中,在 cmakelist 中添加头文件搜索路径,如:include_directories(xxx/xxx/xxx)

七、模块功能的使用

此处只列举跟 Android、iOS 不一样的地方。其他的用法可参考MSDK文档

7.1 推送模块

接口使用方式可以参考文档推送模块

7.1.1 信鸽渠道(XG)

配置信息:

在 MSDKConfig.ini中,添加 XG 鸿蒙的配置

登录 登录 - 腾讯云,在产品管理>配置管理页面获取应用的 AccessID、AccessKey。这里可以复用 Android 端的

XG_ACCESS_ID_HARMONY = xxx
XG_ACCESS_KEY_HARMONY = xxx

除了 MSDKLocalNotification 结构体和离线模式,其他接口跟 Android 端用法一样。另支持 cleanBadgeNumber 清除角标功能。

  • 后台推送接口:

移动推送 推送接口-API 文档-文档中心-腾讯云

  • 鸿蒙通道消息分类:

移动推送 鸿蒙消息分类功能使用说明-SDK 文档-文档中心-腾讯云

  • 鸿蒙通道的抵达回执:

移动推送 鸿蒙通道抵达回执获取指南-SDK 文档-文档中心-腾讯云

  • 离线模式:

离线模式下需要在 entry module 的 /src/main/module.json5 中添加 metadata 字段,可参照文档 鸿蒙离线通道配置鸿蒙参数申请指南

  • MSDKLocalNotification:

用于添加本地消息时,需要使用到的本地消息体。

参数名 类型 必填 说明
notifyId string 通知 id,设置 SDK 内部会根据时间生成
threadId string 通知分组,不传则使用默认分组
traceId string 附加参数
type int NOTIFICATION 通知 1 -
PUSHMESSAGE 透传消息 2 -
notificationSlotType int 通知slot 类型,参考 notificationManager.SlotType 已有如下值
0 - UNKNOWN_TYPE 未知类型
1 - SOCIAL_COMMUNICATION 社交通信
2 - SERVICE_INFORMATION 服务提醒
3 - CONTENT_INFORMATION 内容资讯
4 - LIVE_VIEW 实况窗(预留能力,暂未支持)
5 - CUSTOMER_SERVICE 客服消息。该类型用于用户与商家之间的客服消息,需由用户主动发起
isAlertOnce boolean 设置是否仅有一次此通知提醒
largetIcon string 通知大图标。可选字段,图像像素的总字节数不超过 100KB。实际显示效果依赖于设备能力和通知中心 UI 样式
largetIconType int 大图标图片类型: 0 本地图片资源文件名,图片应位于 media 目录下
1 图片 url
title string 本地通知标题
content string 本地通知内容
additionalText string 通知概要内容,是对通知内容对补充,不传则使用 content 代替
inlines string[] 多行类型通知,最多支持 3 行内容,并且每行内容不能为空,如果为空则弹出普通通知
badgeNumber int 本地通知为通知消息时生效,要增加的角标数,大于等于 0, 不传角标数不变
date int 本地通知触发的日期
注意:格式为:
year*10000 + month*100 + day
hour int 在触发本地通知日期前提下,当天允许触发本地通知开启的小时, 24 小时制
min int 在触发本地通知日期前提下,当天允许触发本地通知的分钟,与 hour 字段配合使用
actionType int OPEN_APP 点击通知后触发的行为 0 -
OPEN_CUSTOM_ABILITY 打开应用首页或打开应用自定义页面 1 -
action string 当 actionType 为打开应用自定义页面时,字段 uri 和 action 至少填写一个,优先使用 action 字段
uri string 应用内置页面 ability 对应的 uri,ur对象内部结构请参见 skills 标签。当 actionType 为打开自定义页面时,字段 uri 和 action 至少填写一个。当存在多个 Ability 时,分别填写不同 Ability 的 action 和 uri,优先使用 action 查找对应的应用内置页面
customContent string 附加参数
ttl int 消息过期时间,默认 72h
showMode int 通知展示模式:
DEFAULT 默认都展示 0 -
BACKGROUND 只有后台才展示 1 -

注意:

actionType 中:

OPEN_APP:表示点击通知后,打开应用

OPEN_CUSTOM_ABILITY:表示点击通知后,打开应用的指定页面。有两种方式:action、uri

  • action:

这里需要在 skills 中添加一个 actions,如下图,其中 actions 的内容可以自定义,但需要与上述 MSDKLocalNotification 中的 action 字段保持一致。

  • uri:

这里需要在 skills 中添加一个 actions 和 uris,如下图,其中一定要配置一个空的 actions 内容如下图中的 1 处,然后在 uris 中配置自定义的 url 基本信息。这里的信息需要与 MSDKLocalNotification 中的 uri 字段保持一致,url 的组成为:{scheme}://{host}/{path}

7.2 事件上报模块

事件上报的接口:可参考文档:事件上报模块 · MSDK Developer Reference

7.2.1 灯塔渠道(Beacon)

  • 配置:

灯塔应用统计已迁移到新管理端 http://analytics.beacon.tencent.com/,新管理端应用注册和绑定到所属业务的方式,参考灯塔文档指引:http://tapd.oa.com/beacon_wiki/markdown_wikis/show/#1220412912001667727,如有疑问,可咨询:灯塔小秘。

注意:

  • 不能复用 Android 的 key,鸿蒙端需要重新申请,否则上报失败。
  • 新申请的 key,需要找 goodhu(企业微信号)帮忙开通 qimei36

从 “项目管理-基础信息” 中获取鸿蒙端的 AppKey 填入 MSDKConfig.ini 中的 BEACON_APP_KEY_HARMONY 字段中

BEACON_APP_KEY_HARMONY = xxx

7.3 异常上报模块

异常上报的接口:可参考文档:异常上报模块 · MSDK Developer Reference

注意:其中 MSDKCrash::LogInfo、MSDKCrash::CloseCrashReport 接口暂不支持,OnCrashExtraMessageNotify、OnCrashExtraDataNotify 两个回调返回暂不支持,待 Bugly SDK 支持后,MSDK 予以更新)

7.3.1 Bugly 渠道

7.3.1.1 配置

bugly2 内网注册产品,平台选择 Harmony,可以参考这份文档的“步骤一、注册产品”。

如需使用外网站点,可登录 bugly2 官网获取用户 ID 后,联系 bugly小助手 添加产品管理权限。

将APP ID 、APP KEY 填入 MSDKConfig.ini 中:

BUGLY2_APP_ID_HARMONY = xxx
BUGLY2_APP_KEY_HARMONY = xxx
7.3.1.2 Bugly 插件名更改为 Bugly2

由于 MSDK bugly 插件接入的是 bugly2 sdk,为了保持 Android、iOS 一致,现将鸿蒙端 bugly 插件改名为 bugly2

更改步骤:

  1. 将游戏项目工程中 MSDKPIXBugly 插件删除掉,下载最新版本鸿蒙整包(其中包含 MSDKPIXBugly2),解压后替换到游戏引擎工程中
  2. 在 MSDKConfig.ini 中,做如下配置的替换:

a)CRASH_REPORT_CHANNEL 将其中的 Bugly 改成 Bugly2

b)BUGLY_APP_ID_HARMONY 改成 BUGLY2_APP_ID_HARMONY

c)BUGLY_APP_KEY_HARMONY 改成 BUGLY2_APP_KEY_HARMONY

7.4 QQ 登录

7.4.1 重要提醒

MSDKPIXQQ 鸿蒙版本集成 QQOpenSDK 版本 1.0.2,支持基于 QQOpenSDK 的扫码登录和拉起 QQ App 登录。注意:原拉起 WebView 扫码登录形式已废弃。

7.4.2 QQ 客户端下载

通过华为的应用商店邀请的方式体验版本

优先确认下系统,必须是鸿蒙 NEXT,并且版本号 >= 0.0.68

鸿蒙 QQ 目前会不定期发布公测,业务可先填写相关申请人企微账号,后续有公测计划会拉群通知

【互联】鸿蒙 QQ 体验登记

7.4.3 鸿蒙应用信息提交

将以下两个信息获取,及手Q AppID一并发送给 jiaganzheng(企业微信名)

  • Bundle ID:鸿蒙应用的包名,详情可查看文档中心
  • fingerprint:鸿蒙应用的签名信息

1、可以通过 ets 代码获取

import { bundleManager } from '@kit.AbilityKit';
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO;
let bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags)
let fingerprint = bundleInfo.signatureInfo.fingerprint.toLowerCase()

2、fingerprint 也可通过 shell 命令获取

keytool -printcert -file xxx.cer

证书指纹:
        SHA1: xxx
        SHA256: xxx

取这里的 SHA256 值

3、可以通过 shell 命令查询当前安装的 app 来获取 fingerprint 和 appIdentifier

# usb链接鸿蒙手机后
# 进入shell
hdc shell
# 查询信息,其中有 fingerprint 和 appIdentifier
bm dump -n 包名

7.4.4 配置

7.4.4.1 在 MSDKConfig.ini 中有如下配置
// 替换 {YOUR_QQ_APP_ID} 为业务申请的QQ APPID
QQ_APP_ID = {YOUR_QQ_APP_ID}
7.4.4.2 entry 的 module.json5 配置文件,请注意 scheme 的大小写
// module.json5 的"module"节点下配置 querySchemes
"querySchemes": [
    "https",
    "qqopenapi"
]  

// 在 Ability 的 skills 节点中配置scheme
"skills": [
 {
    "entities": [
      "entity.system.browser"
    ],
    "actions": [
      "ohos.want.action.viewData"
    ],
    "uris": [
      {
        "scheme": "qqopenapi", // 接收 QQ 回调数据
        "host": "{业务的互联 appId}", // 业务申请的互联 appId,注意这里{}也一起被替换
        "path": "auth",
        "linkFeature": "Login",
      }
    ]
  }
]

7.4.5 接口调用方式

注意:

  • 如果之前发邮件申请过 H5 账密,未安装手Q场景下拉起的是账密页面
  • 如果之前未申请过 H5 账密,未安装手Q场景下默认拉起的是下载 QQ 页面
7.4.5.1 通过拉起 QQ App 登录
c#:
// 注:permission 默认传 all 即可
MSDKLogin.Login("QQ", "all", "", "");

c++:
// 注:permission 默认传 all 即可
MSDKLogin::Login("QQ", "all", "", "");
7.4.5.2 通过 QQ SDK 扫码登录
c#:
// 注:
// 1. permission 默认传 all 即可
// 2. 在扩展参数传入 '{\"QRCode\":true}' 参数指定使用扫码登录
MSDKLogin.Login("QQ", "all", "", "{\"QRCode\":true}");

c++:
// 注:
// 1. permission 默认传 all 即可
// 2. 在扩展参数传入 '{\"QRCode\":true}' 参数指定使用扫码登录
MSDKLogin::Login("QQ","all", "", "{\"QRCode\":true}");
7.4.5.3 通过网页帐密登录

注意:需要申请 H5 账密

c#:
// 注:
// 1. permission 默认传 all 即可
// 2. 在扩展参数传入 '{\"forceWebLogin\":true}' 参数指定使用网页帐密登录
MSDKLogin.Login("QQ", "all", "", "{\"forceWebLogin\":true}");

c++:
// 注:
// 1. permission 默认传 all 即可
// 2. 在扩展参数传入 '{\"forceWebLogin\":true}' 参数指定使用网页帐密登录
MSDKLogin::Login("QQ","all", "", "{\"forceWebLogin\":true}");

7.5 微信登录

7.5.1 微信客户端下载安装

通过华为的应用商店邀请的方式体验版本

优先确认下系统,必须是鸿蒙NEXT,并且版本号 >= 0.0.68

目前已经支持华为应用商店体验了,后面统一走应用商店的方式,登记到下面的文档中

外部-鸿蒙微信 AppGallery 内测体验权限收集 联系人:peterfan(企业微信名)

登记后,会向手机号发送邀请链接,使用鸿蒙手机访问邀请链接,即可下载微信客户端内测版本。

7.5.2 鸿蒙应用信息提交

将以下两个信息获取,及微信 AppID 一并发送给 jiaganzheng(企业微信名)

  • Bundle ID:鸿蒙应用的包名,详情可查看 文档中心
  • identifier:鸿蒙应用的 appIdentifier,详情可查看 文档中心
7.5.2.1 可以通过 ets 代码获取
import { bundleManager } from '@kit.AbilityKit';
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO;
let bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags)
let identifier = bundleInfo.signatureInfo.appIdentifier
7.5.2.2 可以通过查询当前安装的 app 来获取 fingerprintappIdentifier
# usb链接鸿蒙手机后
# 进入shell
hdc shell
# 查询信息,其中有 fingerprint 和 appIdentifier
bm dump -n 包名
7.5.2.3 可以通过华为开放平台获取 appIdentifier

7.5.3 配置

在 MSDKConfig.ini 中有如下配置

// 申请的微信 APPID,AppID 可以使用 Android 的

WECHAT\_APP\_ID =

7.5.4 entry 中的 module.json5 配置 querySchemes

// module.json5 的"module"节点下配置 querySchemes

"querySchemes": [
    "weixin"
]

7.5.5 接口调用方式

7.5.5.1 跳转微信客户端登录(必须先安装微信客户端)
c#:
MSDKLogin.Login("WeChat", "", "", "");

c++:
MSDKLogin::Login("WeChat", "", "", "");
7.5.5.2 微信 SDK 扫码登录
c#:
MSDKLogin.Login("WeChat", "", "", "{\"QRCode\":true}");

c++:
MSDKLogin::Login("WeChat","", "", "{\"QRCode\":true}");

7.6 WebView

鸿蒙端 WebView 功能大体可参照 MSDKV5 文档:WebView模块 · MSDK Developer Reference

其中 js 调用 native 代码 有所差异:

7.6.1 功能描述

js 代码通过 MSDKWebView 调用 Native 功能,实现网页内的全屏、打开应用、发消息、分享等功能,并将结果通知观察者(MSDKWebViewObserver)。

支持的功能如下:

方法名 功能说明
closeWebView 关闭 MSDK 内置浏览器
setFullScreen 设置/关闭浏览器全屏。设置 isFullScreen 为 true 表示全屏;false 关闭全屏
setScreenOrientation 设置浏览器横竖屏
jsCallNative 暂未支持
sendMsgWebView 暂未支持
shareWebView 暂未支持
isAppInstalled 支持 QQ 和 WeChat,参数填入 “QQ”、“WeChat”
sendGetPhoneNumberRequest 暂未支持
GoForward JS 前进
GoBack JS 后退
7.6.1.1 浏览器操作代码示例(支持:关闭浏览器、设置浏览器全屏、还原浏览器全屏、设置浏览器横竖屏、JS 数据到 Native)
注意:横竖屏的数值跟 Android 相反,6 表示竖屏,7 表示横屏
//初始化协议参数
<script>
var SetFullScreen = '{"MsdkMethod":"setFullScreen","isFullScreen":true}';
var ReSetFullScreen = '{"MsdkMethod":"setFullScreen","isFullScreen":false}';
var CloseWebView = '{"MsdkMethod":"closeWebView","key":"value"}';
var JsCallNative = '{"MsdkMethod":"jsCallNative","type":"execCallJS"}';

// 以下是 鸿蒙 设置浏览器横竖屏示例
var SetLandscapeScreen = '{"MsdkMethod":"setScreenOrientation","screenOrientation":"7"}';
var SetPortraitScreen = '{"MsdkMethod":"setScreenOrientation","screenOrientation":"6"}';
</script>
...
//调用msdkCall,发送CloseWebView到Native
<input type="button" value="关闭MSDK内置浏览器" onclick="msdkCall(CloseWebView)">
<input type="button" value="设置浏览器全屏" onclick="msdkCall(SetFullScreen)">
<input type="button" value="还原浏览器全屏" onclick="msdkCall(ReSetFullScreen)">
<input type="button" value="设置浏览器横屏" onclick="msdkCall(SetLandscapeScreen)">
<input type="button" value="设置浏览器竖屏" onclick="msdkCall(SetPortraitScreen)">
7.6.1.2 JS 前进、后退

可通过 JS 前进、后退接口来控制内置浏览器页面的前进与后退。

    var GoForward = '{"MsdkMethod":"GoForward"}';
    var GoBack = '{"MsdkMethod":"GoBack"}';

    //调用msdkCall,发送GoForward、GoBack到Native
    <input type="button" value="前进" onclick="msdkCall(GoForward)">
    <input type="button" value="后退" onclick="msdkCall(GoBack)">

7.7 OAID

获取 OAID 为敏感信息,需要经过合规流程。涉及 MSDK 的操作:

  • 每次启动仅访问 OAID 相关系统方法一次
  • 插件化方式接入,默认携带

7.7.1 接入步骤

接入 MSDKPIX V5.38.101 及以上鸿蒙版本的时候,按照如下必要步骤继续完成 OAID 的接入。共分为 3 步:

步骤1:获取 msdkoaid.har 包

从产品或者 MSDK 下载链接获取 msdkoaid.har 的 har 包,这个 har 包用于访问系统的 OAID。请将该 har 包放到工程的 har 包集合中,并确保打包到最终的可执行程序中。默认已经携带 msdkoaid.har 包。

步骤2:配置权限声明

OAID 的获取需要系统的 APP_TRACKING_CONSENT 权限,请在游戏的权限列表中添加相应的声明,并做描述。entry/main/src/module.json5 声明示例:

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:module_desc",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      },{
        "name": "ohos.permission.APP\_TRACKING\_CONSENT",
        "reason": "$string:tracking_desc",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ]

其中,name 设置为 ohos.permission.APP_TRACKING_CONSENT,reason 为权限说明。

步骤3:启动时索取权限

默认情况下,应用程序是没有 ohos.permission.APP_TRACKING_CONSENT 权限的,MSDK 无法获取 OAID,需要在获取 OAID 操作之前完成对相应权限的请求,并获取到用户的同意。示例代码:

const at: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
at.requestPermissionsFromUser(MSDKPlatform.getAbilityContext(), ["ohos.permission.APP\_TRACKING\_CONSENT"]).then((data) => {
    if (data.authResults[0] === 0) {
        MSDKLog.d('', 'succeeded in requesting permission');
    }else {
        MSDKLog.d('', 'user rejected');
    }
}).catch((err: BusinessError) => {
        MSDKLog.d('', `request permission failed, error: ${err.code} ${err.message}`);
});

建议请求 OAID 权限的代码放到游戏启动过程,与其他权限一同请求,但至少保障在 MSDK 登录前完成权限请求。当没有权限的时候,OAID 为空字符串。另外,需要关注当前华为的策略:请求权限当前暂无弹窗,默认用户同意。也就是上述方法正常调用后,即可获取到权限。用户可以在系统与元服务中将权限关闭。

步骤5:隐私协议披露

接入 OAID 后,请接入者注意披露相关隐私协议。

验证方法:MSDK 调试日志中,登录请求携带 OAID 字段,长度为 36 位。

7.7.2 注意问题

  • OAID 为插件化方式接入,注意集成对应的 har 包,如果不需要,可以剔除
  • OAID 优先从 TDM 中获取,由于 TDM 当前不支持,该逻辑暂不可使用

7.8 工具模块

7.8.1 判断 QQ 或微信是否安装

注意:在保持 MSDK IsAppInstall 接口不变的情况下,由于鸿蒙的线程模型的问题,目前无法做到在非主线程调用 ets 的接口并且同步返回结果,因此 IsAppInstall 接口在鸿蒙端加一个限制,只能在主线程调用(主线程判断:线程 id == 进程 id)

// C++
bool isQQInstalled = MSDKTools::IsAppInstall("QQ");
bool isWeChatInstalled = MSDKTools::IsAppInstall("WeChat");

// C#
bool isQQInstalled = MSDKTools.IsAppInstalled("QQ");
bool isWeChatInstalled = MSDKTools.IsAppInstalled("WeChat");

Q&A

1、偶现页面卡在登录界面

解决方案:MSDK 的接口只能在 MSDK 初始化完成之后调用,检查代码是否按照文档 3.1 接入 MSDK 初始化回调。

2、信鸽离线模式,在应用未启动的时候无法收到推送消息

推送问题请优先使用排查工具先检查推送下发详情。

工具箱地址:https://console.cloud.tencent.com/tpns/user-tools

工具说明:

1) 设备查询:可通过 TPNS token,获取设备详情、厂商推送注册详情、与该设备绑定的账号列表、与该设备绑定的标签列表等 2) 推送查询:可通过 TPNS token 和 pushId,查询推送状态的详情

3、MSDK 和 TDM 同时使用 qimei sdk,引起库冲突问题

现象:

解决方案:可以参照 文档中心,在 .ohpmrc 文件中,将 resolve_conflict 配置为 true.

注:最新版本的 ide 已经自动处理了这个问题。

4、MSDK 和 TDM 同时使用 qimei sdk,导致编译时报错,提示 qimei sdk 缺失问题

现象:

解决方案:

  • 在 ide 的菜单 Build-》Clean Project
  • 在 ide 的 Terminal 中输入以下指令
ohpm clean
ohpm cache clean
ohpm install --all

5、 未成年控制的问题

MSDK 登录功能已经对接了中控,每次登录都将带上未成年标记,并透传到中控,由中控控制后续的登录流程。游戏可以通过在鸿蒙设备上打开、关闭未成年人设置来验证功能。打开、关闭未成年人开关可以参考鸿蒙文档:文档中心

注:接入功能前请先联系 MSDK 产品。

6、拉起 QQ 授权,授权后提示“暂无可用打开方式”

检查 scheme(文档7.4.4.2部分)是否配置正确。 特别注意:业务申请的互联 appId,注意这里的{}也一起被替换。

7、登录 QQ 时,报参数错误:

错误信息:

{"detail":"","message":"Third app parameters error!","type":3}

原因1:

使用的版本是 10.29 及之前的版本,QQ SDK 不支持混淆(后续版本 QQ SDK 支持了混淆)

解决:

在 entry 中的 obfuscation-rules.txt 文件中添加这一句禁止混淆:-disable-obfuscation

原因2:

使用的版本是 10.29 及之前的版本,QQ SDK 不支持 permission 传入空的情况

解决:

permission 传入"all"

8、登录 Q Q时返回 1002,加载超时

错误信息:

retCode: 9999, msgType: 1002, jsonMsg: {"thirdMsg":"加载超时"}

onSslErrorEvent: {"handler":{},"error":3,xxxxxxxxxxx}

原因:

设备时间不正确

解决:

调整设备时间为网络时间,如设备时间已经是网络时间,可重启应用尝试

9、微信登录失败,提示 “BundleID 信息校验不通过”

解决:

按照 文档 7.5.2 部分 核对相关配置是否处理



Copyright © 2025 MSDK.
All rights reserved.

results matching ""

    No results matching ""