1 功能介绍
保证这些接口功能都在 登录成功 以后调用
请在合适的时机使用这些接口功能,避免 多次调用
完成本文 接口 接入,你可以实现
2 前置条件
拓展功能在接入前必须保证已经完成快速接入,否则部分接口会返回空值
3 接入步骤
3.1 注销账号
场景介绍
- 根据最新网信部政策要求,游戏必须拥有「注销账号」流程
- 接入该接口游戏需要
自绘按钮,按钮点击后调用此接口即可
接入建议
由于注销账号需要获取玩家账号信息,建议将注销账号功能接入在游戏登陆后,例如:游戏设置页面、玩家信息界面等
void accountCancellation();
1
2
3
4
5
6
HeroUsdkSupportKit::GetInstance()->accountCancellation();
1
2
3
注销成功后,渠道内部会做登出操作
3.2 账号中心[全球渠道]
场景介绍
- 账号绑定接口,用于玩家绑定第三方账号信息,接入该接口游戏需要
自绘按钮, - 方便玩家以游客身份成功进入游戏以后,能使用该接口绑定三方账号信息
- 此接口无任何回调,SDK处理相应逻辑
void showAccountCenter();
1
2
3
4
HeroUsdkSupportKit::GetInstance()->showAccountCenter();
1
2
3
3.3 切换账号
场景介绍
- 全球渠道切换账号,接入该接口游戏需要自绘按钮,调用接口后会弹出SDK切换账号页面;
注意
由于平台实现不同,移动端和PC接入方式有差异!
Android和iOS直接调用如下方法,无需绘制页面。调用接口后,SDK内部会打开原生界面,如下:
void switchAccount();
1
2
3
4
HeroUsdkSupportKit::GetInstance()->switchAccount();
1
void UHeroUsdkUserWidget::openSwitchAccountAction()
{
#if PLATFORM_MAC || PLATFORM_WINDOWS || PLATFORM_LINUX
HeroUsdkSupportPcDelegate::GetInstance()->SetSwitchAccountCallback([this]()
{
SwitchAccountWindow = CreateWidget<UPC_SwitchAccountPannel>(this, SwitchCenterWid);
SwitchAccountWindow->AddToViewport();
});
#endif
HeroUsdkSupportKit::GetInstance().switchAccount();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3.4 内置网页浏览器
场景介绍
- 内置网页浏览器可以通过 webId 显示内置浏览器界面,webId 需要从中台配置获取
- 内置网页浏览器为全屏显示
- 内置网页浏览器有4个功能按钮,分别为前进、后退、关闭、刷新,需要到中台配置
WebID获取位置:中台游戏管理 (opens new window)-业务支持能力-全部渠道通用-内嵌H5管

void openBrowser(FString openID) ;
1
2
3
4
HeroUsdkSupportKit::GetInstance()->openBrowser("test02");
1
2
3
3.5 USDK埋点
场景介绍
void trackWithProperties(FString event,TMap<FString, FString> propertys);
1
2
3
4
5
TMap<FString, FString> parameters ;
parameters.Add("sdkOrderId",orderInfo.sdkOrderId) ;
HeroUsdkSupportKit::GetInstance()->trackWithProperties("PayResult",parameters);
1
2
3
4
5
6
3.6 USDK埋点回调
场景介绍
void trackEventDataCallback();
1
2
3
4
5
HeroUsdkSupportKit::GetInstance()->trackEventDataCallback();
1
2
3
4
void usdk_onTrackDataCallBack(FString JSONContent)
{
}
1
2
3
4
5
6
3.7 Xsolla商城
场景介绍
startXsollaPayWithXsollaProperties(TMap<FString, FString> propertys);
1
2
3
4
5
TMap<FString, FString> xsollaParameters;
xsollaParameters.Add("roleId", "HU12345678");
xsollaParameters.Add("roleName", TEXT("测试角色昵称"));
xsollaParameters.Add("serverId", "12345678");
xsollaParameters.Add("serverName", TEXT("测试服"));
xsollaParameters.Add("cpUid", "HU12345678");
xsollaParameters.Add("isJumpOutBrowser", "0");
HeroUsdkSupportKit::GetInstance()->startXsollaPayWithXsollaProperties(xsollaParameters);
1
2
3
4
5
6
7
8
9
10
参数说明
| 字段 | 类型 | 说明 |
| serverId | string | 服务器ID |
| serverName | string | 服务器名称 |
| roleId | string | 角色ID |
| roleName | string | 角色昵称 |
| cpUid | string | 游戏用户ID |
| isJumpOutBrowser | string | 是否跳转外部浏览器,1为外部浏览器,0为内置浏览器 |
3.8 全球账号绑定状态
场景介绍
void getGlobalBindState();
1
2
3
4
5
HeroUsdkSupportKit::GetInstance()->getGlobalBindState();
1
2
3
void usdk_onGetGlobalBindState(HeroUsdkResult result,FString JSONContent,FString msg)
{
if (result == HeroUsdkSuccess)
{
}
else
{
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
参数说明
| 字段 | 类型 | 说明 |
| huaweiBind | string | 华为账号绑定状态 |
| weChatBind | string | 微信账号绑定状态 |
| gameWithBind | string | GameWith账号绑定状态 |
| twitterBind | string | Twitter账号绑定状态 |
| appleBind | string | Apple账号绑定状态 |
| fbBind | string | Facebook账号绑定状态 |
| lineBind | string | Line账号绑定状态 |
| oppoBind | string | Oppo账号绑定状态 |
| googleBind | string | Google账号绑定状态 |
| gcBind | string | GameCenter账号绑定状态 |
3.9 自定义事件追踪融合接口
场景介绍
- 自定义事件追踪融合接口,包含AppsFlyer、Facebook、Firebase、Adjust(根据中台市场插件开关)
void logEvent(FString eventName,TMap<FString, FString> propertys);
1
2
3
TMap<FString, FString> parameters1 ;
parameters1.Add("sdkUserId",Info.sdkUserId) ;
parameters1.Add("userName",Info.userName) ;
HeroUsdkSupportKit::GetInstance()->logEvent("LoginResult",parameters1);
1
2
3
4
5
6
7
3.10 购买事件追踪融合接口
场景介绍
- 购买事件追踪融合接口,包含AppsFlyer、Facebook、Adjust(根据中台市场插件开关),调用购买事
void logPurchaseWithOrderId(FString orderId,double amount,FString currency,TMap<FString, FString> propertys)
1
2
3
TMap<FString, FString> parameters;
HeroUsdkSupportKit::GetInstance()->logPurchaseWithOrderId(orderInfo.sdkOrderId, 128, "CNY", parameters);
1
2
3
4
5
3.11 跳转到其他APP[仅Android]
场景介绍
void jumpToApp(FString url)
1
2
3
FString url = TEXT("https://www.facebook.com/EternalEvolutionOfficial/");
HeroUsdkSupportKit::GetInstance()->jumpToApp(url);
1
2
3
4
3.12 USDK保存图片到相册
场景介绍
void addPicToAlbum(FString imagePath,FString albumName) ;
1
2
3
FString filePath = "图片路径" ;
HeroUsdkSupportKit::GetInstance()->addPicToAlbum(filePath,TEXT("HeroUSDK"));
1
2
3
4
3.13 USDK获取Google/AppleStore商品详情[Android & iOS]
场景介绍
- 获取谷歌/苹果后台商品id对应的商品在不同地区的详细信息,比如币种 、价格 等,
void HeroUsdkSupportKit::getGoogleSkuDetailsList(const TArray<FString>& gameGoodsList)
1
2
3
TArray<FString> ids ;
ids.Add("123") ;
HeroUsdkSupportKit::GetInstance()-> getGoogleSkuDetailsList(ids);
1
2
3
4
5
void usdk_onGetGoogleSkuDetailsList(HeroUsdkResult Result, const FString& JsonArray, const FString& ErrorMsg)
{
if (Result == HeroUsdkSuccess)
{
}
else
{
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
参数说明
| 字段 | 类型 | 说明 |
| usdkGoodsId | string | 游戏商品id |
| price | string | 当地商品的格式化价格,包括其货币符号 |
| googleGoodsId | string | 谷歌后台商品id |
| currency | string | 当地价格和原始价格的 ISO 4217 货币代码。 比如英镑 GBP 、 美元 USD |
| amount | string | 微单位为单位的价格,比如定价1美元的商品,返回1000000。获取单位价格可强制转换成long型除以1000000即可 |
ios回调字段说明
| 字段 | 类型 | 说明 |
| gameGoodsId | NSString | 游戏商品id |
| appleGoodsId | NSString | 苹果后台商品id |
| price | NSString | 当地商品的格式化价格,包括其货币符号。比如 "$99.99","HK$148.00","¥3,000","8 990,00 ₽" |
| currency | NSString | 当前苹果账号所在地区的价格的 ISO 4217 货币代码。 比如俄罗斯卢布 RUB 、 美元 USD |
| amount | NSString | 单位为苹果开发者后台配置商品ID的单位,如USD为美元,CNY为元 |
3.14 USDK获取OAID [仅支持Android平台]
场景介绍
- 匿名设备标识符(Open Anonymous Device Identifier,简称OAID)是一种用于安卓设备的唯一标识符,可由用户重置。该标识符由移动安全联盟(MSA)、中国信息通信研究院以及设备厂商合力推出,旨在替代IMEI等不可重置的设备标识符,以保护用户隐私。
- OAID通常用于不支持Google Play Services的设备(即没有Google Advertising ID的设备),以对其进行广告衡量及激活归因。
WARNING
- OAID模块已经封装成插件,会在打渠道包的时候由出包工具将OAID插件自动加入到游戏中,因此只有渠道包才会有OAID的返回值,母包的返回值为空字符串
void HeroUsdkSupportKit::getOAID();
1
2
3
4
5
HeroUsdkSupportKit::GetInstance()->getOAID();
1
2
class HeroUsdkSupportNotifyImpl : public HeroUsdkSupportNotify
{
void usdk_onGetOAIDResultAction(FString msg)
{
GEngine->AddOnScreenDebugMessage(-1,10, FColor::Red, msg );
UE_LOG(LogTemp, Log, TEXT("usdk_onGetOAIDResultAction : %s"), *msg);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
参数说明
| 字段 | 类型 | 说明 |
| msg | FString | OAID |
3.15 USDK获取Appsflyer的归因 [仅支持Android平台][不是单接市场,用打包工具出包可以使用]
- 直接添加回调消息就行,设置回调在安卓onCreat里面添加过了
void UHeroUsdkUserWidget::usdk_nativeonConversionDataSuccess(const FString& Data)
{
GEngine->AddOnScreenDebugMessage
(
-1,
10,
FColor::Red,
TEXT("usdk_nativeonConversionDataSuccess:")+Data
);
}
void UHeroUsdkUserWidget::usdk_nativeonConversionDataFail(const FString& Data)
{
GEngine->AddOnScreenDebugMessage
(
-1,
10,
FColor::Red,
TEXT("usdk_nativeonConversionDataFail:")+Data
);
}
void UHeroUsdkUserWidget::usdk_nativeonAppOpenAttribution(const FString& Data)
{
GEngine->AddOnScreenDebugMessage
(
-1,
10,
FColor::Red,
TEXT("usdk_nativeonAppOpenAttribution:")+Data
);
}
void UHeroUsdkUserWidget::usdk_nativeonAttributionFailure(const FString& Data)
{
GEngine->AddOnScreenDebugMessage
(
-1,
10,
FColor::Red,
TEXT("usdk_nativeonAttributionFailure:")+Data
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
3.16 USDK兑换苹果礼包码 [仅支持iOS平台]
场景介绍
用户玩家在Apple Store兑换礼包码后,进入游戏进行兑换
必须在收到SDK回调usdk_onExternalPay方法后,游戏客户端生成订单号cpOrder,并调用redeemExternalPay进行礼包码兑换。
goodsId参数的值从usdk_onExternalPay方法返回的结果中进行获取。
FHeroUPaymentParameters类字段说明
| 字段 | 类型 | 说明 |
| goodsId | string | 商品ID |
| extraParams | string | 透传参数 |
| cpOrder | string | CP订单号 |
| callbackUrl | string | 内购回调地址,两种配置方式: 1、可由运营在后台-游戏管理中进行配置,若运营在后台进行了配置则此参数无效; 2、可由开发者在代码中写入 3、如果想实现不同区服的回调,则需要游戏自己区分区服实现 |
void redeemExternalPay(const EUsdkRedeemType& redeemType, FHeroUPaymentParameters paymentParametersData);
1
2
3
4
5
6
7
8
void UHeroUsdkUserWidget::usdk_onExternalPay(const EUsdkRedeemType Type, const FString& GoodsId, const FString& Amount)
{
FHeroUPaymentParameters Params;
Params.goodsId = GoodsId;
Params.cpOrder = FString::FromInt(FMath::Rand());
Params.extraParams = TEXT("UE Redeem");
HeroUsdkSupportKit::GetInstance().redeemExternalPay(Type,Params);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
void UHeroUsdkUserWidget::usdk_onRedeemCallback(const HeroUsdkResult result, const FString& msg)
{
if (result == HeroUsdkSuccess)
{
}
else
{
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3.17 抖音视频录制
场景介绍
- 游戏需要自绘按钮,并调用接口进行控制抖音视频开始/结束录制
- 视频录制完成后保存在相册中
void setDouYinRecordCallbackListener();
void douyinStartAutoRecord();
void douyinStopAutoRecord();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void UHeroUsdkUserWidget::OnInitButtonClicked()
{
HeroUsdkSupportKit::GetInstance().init();
HeroUsdkSupportKit::GetInstance().setOppoResourceCopyListener();
HeroUsdkSupportKit::GetInstance().setDouYinRecordCallbackListener();
}
void UHeroUsdkUserWidget::OnDouYinStartButton()
{
HeroUsdkSupportKit::GetInstance().douyinStartAutoRecord();
}
void UHeroUsdkUserWidget::OnDouYinStopButton()
{
HeroUsdkSupportKit::GetInstance().douyinStopAutoRecord();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void UHeroUsdkUserWidget::usdk_onDouYinStartAutoRecordSuccess(const FString& data)
{
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, data);
}
void UHeroUsdkUserWidget::usdk_onDouYinStartAutoRecordFail(const FString& data)
{
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, data);
}
void UHeroUsdkUserWidget::usdk_onDouYinStopAutoRecordSuccess(const FString& data)
{
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, data);
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(data);
if (FJsonSerializer::Deserialize(JsonReader, JsonObject))
{
if (JsonObject->HasField("video_path"))
{
VideoPath = JsonObject->GetStringField(TEXT("video_path"));
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red,TEXT("VideoPath:")+ VideoPath);
FShareInfo temp;
temp.sharePlatform= HeroUSDKSharePlatformDouyin_Moment;
temp.shareType = HeroUSDKShareTypeVideo ;
temp.title = shareInfo.title;
temp.text = shareInfo.text;
temp.videoPath = VideoPath ;
temp.tagOne = "标签1";
HeroUsdkSupportKit::GetInstance().share(temp);
}
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to parse JSON data"));
}
}
void UHeroUsdkUserWidget::usdk_onDouYinStopAutoRecordFail(const FString& data)
{
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, data);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59