提交 f5b44e44 作者: 刘添

合并分支 'sdk_doc_demo' 到 'master'

更新文档内容

查看合并请求 zwwl/zw_game_sdk!291
......@@ -41,25 +41,6 @@ export struct SecondMainPage {
} catch (err) {
console.error('设置横屏失败: ' + JSON.stringify(err));
}
// let thirdAccountInfo1: gamePlayer.ThirdAccountInfo = {
// 'accountName': '深海花园游戏账号登录' , // 可以修改为自定义名称
// 'accountIcon': $r('app.media.ic_float') // 确保图标存在
// };
// let request: gamePlayer.UnionLoginParam = {
// showLoginDialog: true, // 是否弹出联合登录面板。true表示强制弹出面板,false表示优先使用玩家上一次的登录选择,不弹出联合登录面板,若玩家首次登录或卸载重装,则正常弹出
// thirdAccountInfos: [
// thirdAccountInfo1 // 若游戏无官包或无官方账号体系,请传空数组
// ],
// loginPanelType: gamePlayer.LoginPanelType.BUTTON
// };
// SDKToolsManager.getInstance().setRequest(request)
// 初始化日志打印悬浮框入口,release包不显示
// AppLog.getAppLog().showLog(() => {
// //AppLog.getAppLog().hideLog()
// this.getUIContext().getRouter().back()
// })
}
build() {
......@@ -182,9 +163,5 @@ export struct SecondMainPage {
}.height('100%')
.width('100%')
}
aboutToDisappear(): void {
DialogManagerService.getInstance().closePaymentDialog();
}
}
# 国内游戏鸿蒙客户端sdk对接文档
# 国内游戏鸿蒙客户端sdk对接文档
......@@ -16,20 +16,20 @@
正式接入前请务必阅读掌玩SDK接入流程的介绍,并且在掌玩SDK平台获取游戏id(game_id),游戏包名(packageName),此参数将由掌玩游戏对接技术或产品对接,对接时由平台方提供game_id,packageName字段信息,请严格阅读对接时平台对接人员提供参数文档
| 名称 | 说明 | |
| ----------- | -------------- | --- |
| game_id | 游戏在平台的唯一标识 | |
| packageName | 游戏在用户设备安装的唯一标识 | |
| game_secret | 平台方提供,游戏签名密钥 | |
| appStatus | 用户在平台登录的投放媒体标识 | |
| 名称 | 说明 |
| ----------- | -------------- |
| game_id | 游戏在平台的唯一标识 |
| packageName | 游戏在用户设备安装的唯一标识 |
| game_secret | 平台方提供,游戏签名密钥 |
| appStatus | 用户在平台登录的投放媒体标识 |
# 二.快速集成
1. 在devecostudio里项目工程目录执行如下命令:
``
ohpm config set registry  "http://8.149.138.39:9099/repos/ohpm,https://ohpm.openharmony.cn/ohpm"
``
```
ohpm config set registry  "http://8.149.138.39:9099/repos/ohpm,https://ohpm.openharmony.cn/ohpm"
```
2.在devecostudio里项目工程目录执行如下命令:
......@@ -53,88 +53,132 @@ ohpm install zwgame@0.6.0
1.宿主app的工程里,EntryAbility的onCreate()方法里加入如下代码:
`` SDKToolsManager.getInstance().firstInitBeforePrivacy(this.context as common.UIAbilityContext)
``
```
SDKToolsManager.getInstance().firstInitBeforePrivacy(this.context as common.UIAbilityContext)
```
2.宿主app的工程里,EntryAbility的onWindowStageCreate()方法里加入如下代码:
``
setTimeout(()=>{
SDKToolsManager.getInstance().initSDK(windowStage,'深海花园游戏账号登录',$r('app.media.ic_float'),this.context, {
getPrivacyCallBack: (data: boolean): void => {
if (data) {
// 值为true代表同意
LogUtil.info('zfcs', '用户点击了隐私弹框的同意按钮')
}
} }, {
sdkCodeCallback: (code: number): void => {
// code=1 :修改密码;code = 2:退出登录;3:切换账号 ;4:账号登录异常
LogUtil.info('zfcs ','sdkCodeCallback: ' + code)
}
})
```
setTimeout(()=>{
SDKToolsManager.getInstance().initSDK(windowStage,'深海花园游戏账号登录',$r('app.media.ic_float'),this.context, {
getPrivacyCallBack: (data: boolean): void => {
if (data) {
// 值为true代表同意
LogUtil.info('zfcs', '用户点击了隐私弹框的同意按钮')
}
} }, {
sdkCodeCallback: (code: number): void => {
// code=1 :修改密码;code = 2:退出登录;3:切换账号 ;4:账号登录异常
LogUtil.info('zfcs ','sdkCodeCallback: ' + code)
}
})
},500)
``
其中必传的四个参数,windowStage 对应window.WindowStage;thirdInfo: 三方账号信息名称;customerIcon: 三方游戏icon;context 对应 common.UIAbilityContext
```
备注:
| 参数 | 说明 |
| ------------------------------------------- | ------------------------------------------------------------------- |
| 参数1 | window.WindowStage |
| 参数2 | 三方账号信息名称 |
| 参数3 | 三方游戏icon |
| 参数4 | common.UIAbilityContext |
| getPrivacyCallBack: (data: boolean) => void | data值为 true代表:玩家已经同意了隐私协议,并点击了同意按钮,选择进入游戏;false代表:玩家未同意隐私协议,此时会退出游戏 |
| sdkCodeCallback: (code: number) => void | code=1 :修改密码;code = 2:退出登录;code=3:切换账号; code = 4: 账号登录异常,已注销(封禁)等等 |
3.宿主app的工程里,EntryAbility的onWindowStageDestory()方法里加入如下代码:
``
```
SDKToolsManager.getInstance().onWindowStageDestroy()
``
```
4.宿主app的工程里,EntryAbility的onBackground()方法里加入如下代码:
``
```
SDKToolsManager.getInstance().onBackground()
``
```
5.宿主app的工程里,EntryAbility的onForeground()方法里加入如下代码:
``
```
SDKToolsManager.getInstance().onForeground()
``
```
6.宿主app的工程里,首页 Index 页面是个过渡页面,按照demo代码来写即可(备注:“SeondMainPage”就是对应的游戏页面,替换为对应的游戏页面即可,其他不必调整)。并且 aboutToAppear()方法里加入如下代码,给游戏sdk注入掌玩SDK平台获取游戏id`gameId `、游戏包名`packName`、游戏工程的版本号`versionCode`、页面横竖屏字段(0:横屏;1:竖屏)、`appStatus`(0默认SDK,1表示巨量AD,2表示快手,3表示腾讯)、宿主的上下文环境, 展示游戏的背景图,种花游戏需设置为true(true:展示;false:不展示)
6.宿主app的工程里,首页 Index 页面是个过渡页面,按照demo代码来写即可(备注:“SeondMainPage”就是对应的游戏页面,替换为对应的游戏页面即可,其他不必调整)。并且在Index页面需在 aboutToAppear()方法里加入如下代码,给游戏sdk注入掌玩SDK平台获取游戏id`gameId `、游戏包名`packName`、游戏工程的版本号`versionCode`、页面横竖屏字段(0:横屏;1:竖屏)、`appStatus`(0默认SDK,1表示巨量AD,2表示快手,3表示腾讯)、宿主的上下文环境, 展示游戏的背景图,种花游戏需设置为true(true:展示;false:不展示)
``
SDKToolsManager.getInstance().aboutToAppear('20248','com.xmdzzharmony.huawei','1.0.0',1,'1',this.getUIContext(), true)
``
```
SDKToolsManager.getInstance().aboutToAppear('20248','com.xmdzzharmony.huawei','1.0.0',1,'1',this.getUIContext(), true)
```
备注:
| 参数 | 说明 |
| --- | -------------------------- |
| 参数1 | gameId |
| 参数2 | 游戏包名 |
| 参数3 | 游戏版本号 |
| 参数4 | 0:sdk页面横屏显示;1:sdk页面竖屏显示 |
| 参数5 | 默认传0 |
| 参数6 | this.getUIContext() // 上下文 |
| 参数7 | 展示游戏的sdk个人中心背景图,默认传false |
7.sdk登录的方法:
其中:SDKToolsManager.getInstance() 为获取当前工具的单例对象;showSdkLogin()的对应的参数依次为:当前宿主的上下文、华为联合登陆面板展示的游戏登录的标题内容、游戏图标(图标大小不能超过35KB)、是否显示悬浮球的状态回调接口(true:显示悬浮球;false:不显示悬浮球)、关闭华为联合登录面板的回调接口(1002000016是统一错误码,代表关闭了华为联合登录面板)
```
SDKToolsManager.getInstance()
.showSdkLogin(this.getUIContext(), '深海花园游戏账号登录', $r('app.media.ic_float'), {
getBooleanData: (isShowFloatBall: boolean): void => {
this.shoudleShowWindow = isShowFloatBall
}
}, {
onPanelClosed: (code: number, reason: string): void => {
if (code == 1002000016) {
// 用户关闭了登录面板
LogUtil.info('test', '用户关闭了联合登录面板')
}
} })
SDKToolsManager.getInstance()
.showSdkLogin(this.getUIContext(), '熊猫大作战游戏账号登录', $r('app.media.ic_float'), {
getBooleanData: (isShowFloatBall: boolean): void => {
this.shoudleShowWindow = isShowFloatBall
const info = UserSDKManager.getInstance().getUserLoginInfo()
LogUtil.info('zfcs 登录成功: ' + this.shoudleShowWindow +', '+ info )
}
}, {
onPanelClosed: (code: number, reason: string): void => {
// 用户关闭了登录面板
LogUtil.info('test', '用户关闭了联合登录面板code: ' + code)
}
})
```
备注:
| 参数 | 说明 |
| --- | ---------------------------------------------------------------------------------------------------------------- |
| 参数1 | context,值传this.getUIContext() |
| 参数2 | 华为联合登录面板显示游戏账号登录的显示名称,例如“'熊猫大作战游戏账号登录“,”'种花游戏账号登录“ |
| 参数3 | $r('app.media.ic_float'):游戏的图标,图标大小不能超过35kb |
| 参数4 | getBooleanData: (isShowFloatBall: boolean) => void  : isShowFloatBall值为true代表玩家登录成功,显示sdk悬浮球,false:玩家登录失败,不显示悬浮球 |
| 参数5 | onPanelClosed?: (code: number, reason: string) => void;  : 华为联合登录面板关闭时回调 |
8.拉起支付的方法:
``
let jsonStr = '{"role":{"event":"other","server_id":"1","role_name":"主宰传奇","cp_role_id":"2","server_name":"主宰服","role_level":"83","role_vip":"0"},"order":{"cp_order_id":"1770709001026","amount":"100","product_price":"100","product_id":"com.product.test02","product_cnt":"1","product_name":"1元档充值","product_desc":"商品","ext":"测试数据"}}'
``
```
let jsonStr = '{"role":{"event":"other","server_id":"1","role_name":"主宰传奇","cp_role_id":"2","server_name":"主宰服","role_level":"83","role_vip":"0"},"order":{"cp_order_id":"1770709001026","amount":"100","product_price":"100","product_id":"com.product.test02","product_cnt":"1","product_name":"1元档充值","product_desc":"商品","ext":"测试数据"}}' ``
`` AppUtils.createOrderWithHuaWei(jsonStr, '1', '2', this.amount,this.product_price,this.product_cnt,'com.product.test02',
{
Success: (msg: Object): void => {
LogUtil.info('zfcs 支付成功: ' + msg.toString())
},
Failed: (msg: string): void => {
LogUtil.info('zfcs 支付失败: ' + msg.toString())
}
})
```
``
AppUtils.createOrderWithHuaWei(jsonStr, '1', '2', this.amount,this.product_price,this.product_cnt,'com.product.test02',
{
Success: (msg: Object): void => {
LogUtil.info('zfcs 支付成功: ' + msg.toString())
},
Failed: (msg: string): void => {
LogUtil.info('zfcs 支付失败: ' + msg.toString())
}
})
``
其中:createOrderWithHuaWei()方法里参数依次为:要传入的支付信息的json字符串(jsonStr)、server_id(区服Id)、cp角色Id(cp_role_id)、商品总价、商品单价、商品数量、商品Id(product_id)、支付结果回调:Success代表支付成功回调,Failed代表支付失败回调
备注:
| 参数 | 说明 |
| --- | ------------------------------------------------------------------------------------------ |
| 参数1 | 要传入的支付信息的json字符串(jsonStr) |
| 参数2 | server_id(区服Id) |
| 参数3 | cp角色Id(cp_role_id) |
| 参数4 | 商品总价 |
| 参数5 | 商品单价 |
| 参数6 | 商品数量(传1) |
| 参数7 | 商品Id(product_id) |
| 参数8 | 支付结果回调:Success: (msg: Object) => void : 代表支付成功回调,Failed: (msg: string) => void  : 代表支付失败回调 |
> 下单支付字段说明
......@@ -160,13 +204,19 @@ AppUtils.createOrderWithHuaWei(jsonStr, '1', '2', this.amount,this.product_price
9.角色上报的方法:
``
const jsonStr = '{"cp_account":"cp_account","role":{"event":"create","server_id":"serviceId","server_name":"server_name","cp_role_id":"cpRoleId","role_name":"role_name","role_level":"role_level","role_vip":"role_vip","combat_num":"combatnum","online_time":"online_time","reiki_num":"reikinum","attack":"attack","profession":"profession","gang_name":"gang_name","trans_level":"translevel","sponsor_level":"sponsorlevel","main_city_level":"maincitylevel","power":"power","chapter_index":"chapterindex"}}'
``
```
const jsonStr = '{"cp_account":"cp_account","role":{"event":"create","server_id":"serviceId","server_name":"server_name","cp_role_id":"cpRoleId","role_name":"role_name","role_level":"role_level","role_vip":"role_vip","combat_num":"combatnum","online_time":"online_time","reiki_num":"reikinum","attack":"attack","profession":"profession","gang_name":"gang_name","trans_level":"translevel","sponsor_level":"sponsorlevel","main_city_level":"maincitylevel","power":"power","chapter_index":"chapterindex"}}' ``
``
AppUtils.onRole('serviceId', 'cpRoleId', jsonStr);
``
`` AppUtils.onRole('serviceId', 'cpRoleId', jsonStr);
```
备注:
| 参数 | 说明 |
| --- | ----------------- |
| 参数1 | 区服ID |
| 参数2 | 游戏方角色ID |
| 参数3 | 需要上报的角色信息(json格式) |
参数说明
......@@ -201,18 +251,21 @@ AppUtils.onRole('serviceId', 'cpRoleId', jsonStr);
| other | 其他 |
10.悬浮按钮的集成方法:宿主app页面的build()根节点必须为stack,加入如下代码,可见性由sdk暴露标记值,需宿主app接收该标记:
``
SuspensionV2().visibility(this.shoudleShowWindow ? Visibility.Visible : Visibility.None).id('trigger_text_privacy')
.hitTestBehavior(HitTestMode.None)
.height('100%')
.width('100%')
``
```
SuspensionV2().visibility(this.shoudleShowWindow ? Visibility.Visible : Visibility.None).id('trigger_text_privacy')
.hitTestBehavior(HitTestMode.None)
.height('100%')
.width('100%')
```
11.获取player_id的方法:
``
```
UserSDKManager.getInstance().getUserLoginInfo()
``
这个方法获取本地的缓存的数据,里面有player_id这个字段,遍历取'player_id'对应的值就可以拿到
```
备注: 这个方法获取本地的缓存的数据,里面有player_id这个字段,遍历取'player_id'对应的值就可以拿到
12.服务端接口 调用方直接使用http 调用接口:<a name="sec5">
......@@ -335,7 +388,20 @@ LogUtil.info('zfcs', info);
})
```
备注:第一个参数是context(应用的上下文),第二个参数是:广告的场景Id,第三个是数据的状态回调。
备注:
| 参数 | 说明 |
| --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 参数1 | context(应用的上下文) |
| 参数2 | 广告的场景Id |
| 参数3 | 广告回调接口:\|onAdSubscribeFail: (info: string) => void // 广告订阅失败 \|onAdPlayFailed: (info: string) => void // 播放失败 \|<br/>\| onAdPlayReward: (info: string) => void // 广告奖励 \|<br/>\| onAdOpen: (info: string) => void // 打开 \|<br/>\| onAdClick: (info: string) => void // 点击 \|<br/>\| onAdClose: (info: string) => void // 关闭 \|<br/>\| onAdPlayBegin: (info: string) => void // 开始播放 \|<br/>\| onAdPlayEnd: (info: string) => void // 播放结束 \|<br/>\| onAdDataEmpty: (info: string) => void // 返回的广告数据为空 \| |
14.宿主游戏切换账号入口
````
SDKToolsManager.getInstance().switchAccount()
````
QA:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论