App 弹窗是 GMP ReachSDK 提供的弹窗触达功能。
需提供 鸿蒙 应用包名和应用签名然后在 GMP 后台配置(管理中心-消息管理-客户端SDK-鉴权配置),需保证与 app 的实际信息一致,可联系您的客户端开发人员获取。该项配置用于接口的安全鉴权校验,不会用于其他用途。
示例如下:
# 鸿蒙包名 com.example.gmpdemo # 获取鸿蒙应用签名 SHA256 fingerprint 6918672280841579539
然后到GMP后台配置相关信息

弹窗 SDK 依赖 Finder SDK 进行数据回流,在使用弹窗 SDK 前,请确保已经集成了 Finder SDK。
Finder HarmonyOS Next SDK接入指南
引入SDK(oh-package.json5)
"dependencies": { ... "@volcengine/gmp_popup": "0.0.1-alpha.4" }
在gmp首页,点击右上角头像-项目管理,即可进入项目后台页查看对应项目的项目id和应用id(项目id是初始化弹窗sdk的appid,应用id是用于初始化Finder SDK的appid)

进入火山引擎控制台,点击右上角头像 icon,红框中的账号 ID 即是 主账号id
在GMP首页,选择管理中心-通道管理-App弹窗-应用管理即可打开弹窗应用列表,最左侧一栏为弹窗应用id,将所选应用的弹窗应用id传入sdk初始化即可
GMP 会根据 uuid 和 uuid type 对用户进行人群圈选,所以需要确保 SDK 中使用正确的 uuid 和 uuid type 。建议使用客户自有体系的用户 id 作为 uuid,并且 CDP ID 图谱中找到该 id 对应的 ID Code 作为 uuid type。若要使用匿名用户弹窗功能,则需要获取deviceId type。
可以在 CDP 中,进入“数据融合-ID 图谱构建”界面中查看当前项目中的所有id type

device_id_type
首先您需要初始化 Finder SDK,具体可参考:Finder HarmonyOS Next SDK初始化,再初始化弹窗 SDK
说明
Saas GMP Host 为:https://gmp-saas-api.console.volcengine.com
GMP 域名为私有化部署域名 , 默认为 https://xxxxxx.com 。如果租户名不为 gmp ,则需要拼接租户名,如: https://xxxxxx.com/gmpa
注意
弹窗SDK 需要在 AbilityStage 类的 onCreate() 方法主进程主线程初始化。
弹窗SDK 请在 AbilityStage 中初始化,如果您的app中涉及隐私弹窗协议,只需要在隐私弹窗协议同意之后再更新用户画像即可。
export default class MyAbilityStage extends AbilityStage { static appLog = new AppLog() onCreate() { //初始化Finder MyAbilityStage.appLog.init(this.context, finderInitConfig) MyAbilityStage.appLog.user()?.setUserUniqueID(UUID, UUID_TYPE) MyAbilityStage.appLog.start() //GMP项目配置 const reachConfig: ReachConfig = { appLog: MyAbilityStage.appLog, appId: "your appid", appConfig: { host: "your host" }, mainAccountId: MAIN_ACCOUNT_ID, uniqueUid: UUID, uniqueUidType: UUID_TYPE, deviceIdType: DEVICE_ID_TYPE } //资源位配置 const popupConfig = new PopupConfig("POPUP_APP_ID", reachConfig) //初始化弹窗SDK GMPPopupSDK.init(this.context, popupConfig) } } }
参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
appLog | AppLog | 是 | Finder 初始化实例 |
appId | string | 是 | GMP 项目ID,可根据3.1.1 获取 |
appConfig | interface | 是 | 配置请求域名(参考初始化中的代码) |
uniqueUid | string | 否 | 用户画像id,存在用户画像时传入 |
uniqueUidType | string | 否 | 用户画像id类型,存在用户画像时传入 |
mainAccountId | string | 否 | saas版本的主账号id,接入saas版本必须传入 |
deviceIdType | string | 否 | 用户设备id类型,开启匿名(未登录)用户弹窗时需传入,否则请勿传入[详细见4.5],获取方式参考3.1.4 |
参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
popupAppId | string | 是 | 弹窗应用id,在gmp页面获取(获取方式见3.1.3) |
reachConfig | ReachConfig | 是 | 触达配置 |
anonymousPopupEnabled | boolean | 否 | 设置是否需要支持匿名(未登录)用户弹窗(默认关闭)[详细见4.5] |
|
|
| 拉取规则的间隔(默认5min) |
| boolean | 否 | 日志开关,默认为false |
|
| 否 | 自定义日志打印方法 |
如您的产品中有账户体系,请在用户登录后立即设置 uuid,以保证用户登录前后口径一致性。Finder SDK 登陆态变化可参考:Finder SDK 登陆态变化
除此之外,您还需要及时通知弹窗SDK用户画像的变化
用户登录
GMPPopupSDK.updateUUID("your_uuid", "your_uuid_type") appLog.user()?.setUserUniqueID("your_uuid", "your_uuid_type")
退出登录
GMPPopupSDK.updateUUID(null, null) appLog.user()?.setUserUniqueID(null, null)
弹窗 SDK 提供了弹窗状态的回调监听,接入方可以通过该回调监听弹窗弹出/关闭/弹窗按钮点击行为,并且可以拦截对应的点击事件
GMPPopupSDK.setPopupWindowStatusListener({ popupWindowShouldShow: (): boolean => { //弹窗是否允许展示 true 允许展示,false 不允许展示。可以在这里按需加自己的判断逻辑 return true }, onPopupWindowShow: (closeAction: () => void): void => { //弹窗展示回调 }, onPopupWindowDismiss: (): void => { //弹窗关闭回调 }, onPopupWindowClick: (url: string): void => { //弹窗中配置了跳转链接的按钮/图片被点击且拦截了弹窗的点击事件时回调 //只有当 interceptPopupWindowClick 返回为 true 时回调 //@param url 点击的跳转链接 }, interceptPopupWindowClick: (url: string): Boolean => { //是否拦截弹窗的点击事件 true代表拦截(自行处理跳转逻辑), //为false则会由sdk启动内嵌h5页处理跳转逻辑(必须是http开头的链接) //@param url 点击的跳转链接 return false }, popupWindowShowJudgeFromClient: (json: Record<string, Any>, callback: ClientRuleStrategyCallback): void => { // 弹窗前解析自定义规则,配置了自定义规则才会回调到这个接口(适用于需要通过配置参数判断是否需要弹窗的场景) // @param json 透传json 可能为null // @param callback 可以弹窗回调true,否则回调false。 this.clientPopupWindowJSON = JSON.stringify(json) callback.showPopupWindow(true) } })
SDK内部会持有该listener的强引用,因此在不需要用到的时候请及时移除它
GMPPopupSDK.removePopupWindowStatusListener()
点击预览弹窗后,接入方可以通过扫一扫获取到弹窗的id,将其传入SDK的预览弹窗接口,可以在调用预览接口的页面立刻弹出对应弹窗,调用SDK预览接口示例如下
GMPPopupSDK.previewPopupWindow("windowId")
在gmp平台管理中心-通道管理-app弹窗,找到需要预览的弹窗扫码即可获取到对应弹窗的windowId
在某些沉浸式场景(如视频播放)或已弹窗场景可以禁止弹窗SDK的弹窗以避免对用户的体验带来干扰(关闭后需要在允许弹窗的场景再次调用来重新启用弹窗功能)
//false 禁用 true 启用 GMPPopupSDK.enablePopup(false)
APP弹窗是事件触发型的通道,在客户端本地完成弹窗的触发,「app弹窗」的触发可能在以下场景下触发失败;
触发弹窗时命中勿扰配置;
触发弹窗时用户侧为弱网不境;触发弹窗时遭遇其他未知异常。
当前触发失败后本次触达任务就结束了,因此在触发弹窗时允许设置补偿机制使本次触发失败的弹窗任务在下一次事件触发时尝试进行弹窗。
设置弹窗补偿的示例代码如下
GMPPopupSDK.setCompensateEnable(true)
在某些场景下想关闭正在显示的GMP弹窗时,可通过以下方法进行关闭
GMPPopupSDK.closeShowingPopupWindow()
popupConfig.setAnonymousPopupEnabled(true) //初始化的ReachConfig中必填deviceIdType const reachConfig: ReachConfig = { ... deviceIdType: "your deviceIdType" }
在GMP首页,选择用户触达-消息触达-新增触达任务,选择App弹窗通道并选择在 3.1.3 中获取的弹窗应用,配置任务对应的事件及筛选条件如下图所示
在app上使用finder sdk上报对应的事件及参数
appLog.event("eventName", params)