跳到主要内容

2.x 升级 3.x

信息

v3 主要改动:

  • API 使用方式从 OmniSDK 修改为 OmniSDKv3
  • API 的参数和返回值均改为强类型数据结构,不再使用 v2 的 JSON 字符串
  • 主要的API的回调使用OmniSDKListener中, 详情见: v3 回调处理变更
  • 优化错误码,更友好的进行错误处理

回调处理

提示
  • v2 使用对应的方法onSuccess()onFailure()onCancel() 处理API的 成功、失败、取消
  • v3 结果使用 OmniSDKResult,通过 result.isSuccess() 判断成功,失败时通过 result.error 所提供的 code,判断是否为取消、网络异常、参数不正确等情况

以下示例:

new OmniSDKListener() {
....
@Override
public void onPurchase(@NonNull OmniSDKResult<OmniSDKPurchaseResult> result) {
if (result.isSuccess()) {
// 支付成功
OmniSDKPurchaseResult purchaseResult = result.get();
Log.i(tag, "onPurchase successfully, result = "+purchaseResult);
} else {
OmniSDKError error = result.error();
if (error.getCode() == OmniSDKErrorCode.USER_CANCELLED.getValue()) {
// 支付取消
Log.e(tag, "onPurchase cancelled");
} else {
Log.i(tag, "onPurchase Fail : "+error.toString())
}
}
}
...
}

回调结果

OmniSDKResult

接口名称接口功能
isSuccess(): Boolean是否成功
get(): T获取对应结果的真实类型
error(): OmniSDKError失败时,获取对应错误信息

初始化

提示
  • v2中 InitParams 初始化数据配置v3已移除,同时对应API名称initialize 变更为v3的start
  • 以下示例:
// 设置OmniSDK回调监听
OmniSDKListener listener = new OmniSDKListener(){
....
@Override
public void onStart(@NonNull OmniSDKResult<OmniSDKStartResult> result) {
if (result.isSuccess()) {
Log.i(TAG, "Initialization Done Successfully");
} else {
Log.e(TAG, "Initialization Failed, error : " + result.error());
}
}
...
};
OmniSDKOptions options = OmniSDKOptions.builder().listener(listener).build();
OmniSDKv3.getInstance().start(options);

账号 API

登录

提示

以下示例:

// 构建登录请求opts
OmniSDKLoginOptions opts = OmniSDKLoginOptions.builder()
// 需要使用账号体系
.authMethod(OmniSDKAuthMethod.NONE)
.build();
OmniSDKv3.getInstance().login(appActivity, opts);

获取登录信息

提示
  • v2 登录信息返回值类型是Json字符串,v3变更为OmniSDKLoginInfo,便于cp进行数据解析

以下示例:

OmniSDKLoginInfo loginInfo =  OmniSDKv3.getInstance().getLoginInfo();
if (null != loginInfo){
// 获取用户信息进行玩家角色创建或登录
}

v2返回 JSON 字符串与OmniSDKLoginInfo的字段差异

v2v3描述
uiduserId用户ID
tokentoken令牌
showNameusername用户名
verifySignsignature签名信息 (与 OmniSDK Server 通信使用)
channelidchannelId渠道
verifyTimestampauthTime时间戳
typeauthMethod登录类型
state账号状态
identityProviders关联账号类型
cpUid废弃cpUid
certification废弃实名认证状态
ext废弃扩展参数

关联账号

提示

以下示例:

OmniSDKLinkAccountOptions opts = OmniSDKLinkAccountOptions.builder()
// 需要关联的账号平台
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().linkAccount(gameActivity, opts);

切换账号

提示

以下示例:

OmniSDKSwitchAccountOptions opts = OmniSDKSwitchAccountOptions.builder()
// 需要切换的账号平台 直接通过
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().switchAccount(gameActivity, opts);

关联账号模式

提示

以下示例:

int linkAccountMode = OmniSDKv3.getInstance().getLinkAccountMode(context); 

购买 API

提示

以下示例:

//创建商品信息
OmniSDKPurchaseOptions opts = OmniSDKPurchaseOptions.builder()
.productId(productId)
// 默认为 普通消耗型商品
.productType(skuType)
.productName(productName)
.productUnitPrice(productPrice)
.purchaseAmount(payAmount)
.purchaseQuantity(1)
.purchaseCallbackUrl(gameCallbackUrl)
.currency(currency)
.gameOrderId(gameOrderId)
.gameRoleId(roleId)
.gameRoleName(roleName)
.gameRoleLevel(roleLevel)
.gameRoleVipLevel(roleVipLevel)
.gameServerId(serverId)
.productDesc(productDesc)
.build();
OmniSDKv3.getInstance().purchase(appActivity, opts);

v2 Product 参数与 v3 OmniSDKPurchaseOptions 字段差异

v2v3描述
productIdproductId商品ID
productNameproductName商品名称
productDescproductDesc商品描述
productUnitPriceproductUnitPrice实际支付的货币单价
currencycurrency商品货币代码
extJsonextJson透传扩展参数
skuTypeproductType商品类型
payAmountpurchaseAmount购买总额
productQuantitypurchaseQuantity购买数量
gameCallbackUrlpurchaseCallbackUrl支付回调地址
gameTradeNogameOrderId游戏订单ID
roleIdgameRoleId角色ID
roleNamegameRoleName角色名称
roleLevelgameRoleLevel角色等级
roleVipLevelgameRoleVipLevel角色的VIP等级
zoneIdgameZoneId区域ID
serverIdgameServerId服务器ID
totalAmount (废弃)商品总价

数据上报 API

信息
  • v2数据上报是使用特定API来对应具体的事件,v3数据上报I统一调用 OmniSDKv3.getInstance().track(event: OmniSDKEvent)
    通过 event 的真实类型来区分上报何种事件,如创建角色事件 OmniSDKCreateRoleEvent
  • v2中角色信息 RoleInfo 对应于v3 OmniSDKRoleInfo

创建角色

提示

以下示例:

// 创建对应角色信息
OmniSDKRoleInfo sdkRoleInfo = OmniSDKRoleInfo.builder()
.userId(userId)
.roleId(roleId)
.roleLevel(roleLevel)
.roleName(roleName)
.serverId(serverId)
.serverName(serverName)
.extJson(extJson)
.build();
OmniSDKCreateRoleEvent event = new OmniSDKCreateRoleEvent(sdkRoleInfo);
OmniSDKv3.getInstance().track(event);

进入游戏

提示

以下示例:

OmniSDKRoleInfo sdkRoleInfo = OmniSDKRoleInfo.builder()
.userId(userId)
.roleId(roleId)
.roleLevel(roleLevel)
.roleName(roleName)
.serverId(serverId)
.serverName(serverName)
.extJson(extJson)
.build();
OmniSDKEnterGameEvent event = new OmniSDKEnterGameEvent(sdkRoleInfo);
OmniSDKv3.getInstance().track(event);

角色升级

提示

以下示例:

OmniSDKRoleInfo sdkRoleInfo = OmniSDKRoleInfo.builder()
.userId(userId)
.roleId(roleId)
.roleLevel(roleLevel)
.roleName(roleName)
.serverId(serverId)
.serverName(serverName)
.extJson(extJson)
.build();
OmniSDKRoleLevelUpEvent event = new OmniSDKRoleLevelUpEvent(sdkRoleInfo);
OmniSDKv3.getInstance().track(event);

游戏发货成功

提示

以下示例:

OmniSDKPurchaseEvent event = OmniSDKPurchaseEvent.builder()
.userId(userId)
.orderId(orderId)
.productId(productId)
.productDesc(productDesc)
.productUnitPrice(productUnitPrice)
.productName(productName)
.currency(currency)
.gameServerId(gameServerId)
.gameRoleVipLevel(gameRoleVipLevel)
.gameRoleLevel(gameRoleLevel)
.gameRoleName(gameRoleName)
.gameRoleId(gameRoleId)
.gameOrderId(gameOrderId)
.extJson(extJson)
.purchaseQuantity(purchaseQuantity)
.purchaseAmount(purchaseAmount)
.build();
OmniSDKv3.getInstance().track(event);

v2中支付信息 PayInfo 与v3游戏发货成功事件OmniSDKPurchaseEvent的差异

v2v3描述
uiduserId账号ID
platTradeNoorderIdSDK 订单ID
productIdOmniSDKPurchaseOptions.productId商品ID
productNameOmniSDKPurchaseOptions.productName商品名称
productDescOmniSDKPurchaseOptions.productDesc商品描述
productUnitPriceOmniSDKPurchaseOptions.productUnitPrice商品单价,单位:元
productQuantityOmniSDKPurchaseOptions.productQuantity购买数量
totalAmountOmniSDKPurchaseOptions.purchaseAmount付费金额,单位:元
productUnitOmniSDKPurchaseOptions.gameCurrencyUnit游戏货币单位(魔石,钻石...)
roleIdOmniSDKPurchaseOptions.gameRoleId角色ID
roleNameOmniSDKPurchaseOptions.gameRoleName角色名
roleLevelOmniSDKPurchaseOptions.gameRoleLevel角色等级
roleVipLevelOmniSDKPurchaseOptions.gameRoleVipLevel角色VIP等级
serverIdOmniSDKPurchaseOptions.gameServerId服ID
gameTradeNoOmniSDKPurchaseOptions.gameOrderId游戏订单ID
currencyNameOmniSDKPurchaseOptions.currency货币代码
additionalParamsOmniSDKPurchaseOptions.extJson扩展字段 ,订单支付成功后,透传给游戏
totalAmount废弃总金额
zoneId废弃区ID
partyName废弃帮会名称
virtualCurrencyBalance废弃虚拟货币余额
customInfo废弃扩展字段
paymentTypeName废弃支付类型

自定义买量付费事件

提示

以下示例:

OmniSDKRoleInfo sdkRoleInfo = OmniSDKRoleInfo.builder()
.userId(userId)
.roleId(roleId)
.roleLevel(roleLevel)
.roleName(roleName)
.serverId(serverId)
.serverName(serverName)
.extJson(extJson)
.build();
OmniSDKRevenueEvent event = OmniSDKRevenueEvent.builder()
.roleInfo(sdkRoleInfo)
.consumeNum(consumeNum)
.build();
OmniSDKv3.getInstance().track(event);

常用工具类 API

退出弹窗

提示

以下示例:

OmniSDKQuitOptions opts = OmniSDKQuitOptions.builder()
.isCustomExitUi(gameCustom)
.build();
OmniSDKv3.getInstance().quit(appActivity, opts, result -> {
if (result.isSuccess()) {
OmniSDKQuitResult omniSDKQuitResult = result.get();
Log.i(tag, "quit successfully " + omniSDKQuitResult);
if (omniSDKQuitResult.isCustomExitUi()) {
// 游戏自定义退出游戏的逻辑

} else {
// 使用SDK的弹出游戏弹窗 可以直接杀死进程
killProcess();
}
} else {
OmniSDKError error = result.error();
Log.e(tag, "quit error:" + error);
// 游戏方不弹出自身退出UI界面,立即执行退出游戏业务逻辑处理,比如杀掉游戏应用进程等等
killProcess();
}
});

通过 Custom Tabs 机制打开网页

提示

以下示例:

// 自定义数据组装
OmniSDKOpenBrowserOptions opts = OmniSDKOpenBrowserOptions.builder()
.url(url)
.toolbarLocation(ToolbarLocation.BOTTOM)
.showPrev(true)
.showNext(true)
.build();
OmniSDKv3.getInstance().openBrowserActivity(demoActivity, opts);

应用商店评分引导

提示
  • API名称从 showScoreDialog 变更为 openScoreDialog ,回调部分参考回调处理变更

以下示例:

OmniSDKv3.getInstance().openScoreDialog(demoActivity, result -> {
if (result.isSuccess()) {
Log.i(tag, "评分成功");
} else {
OmniSDKError error = result.error();
Log.e(tag,"评分失败:" + error);
}
});

权限合规

获取权限状态

提示

以下示例:

OmniSDKGetPermissionOptions bluetoothOpts = OmniSDKGetPermissionOptions
.builder()
// 蓝牙权限
.permission(Manifest.permission.BLUETOOTH)
.build();
int bluetoothAdmin = OmniSDKv3.getInstance().getPermissionGrantedStatus(gameActivity, bluetoothOpts);

申请权限

提示

以下示例:

List<String> permissions = new ArrayList<>();
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
// 构建 引导权限请求弹窗信息
OmniSDKPermissionRationaleOptions applyDialog = OmniSDKPermissionRationaleOptions
.builder()
.title("温馨提示")
.rationale("(游戏)需要访问手机的存储空间,用于游戏资源更新等\\n\\n请允许权限申请")
.ok("允许")
.cancel("取消")
.build();
// 构建 跳转应用设置开启权限弹窗
OmniSDKPermissionRationaleOptions guideDialog = OmniSDKPermissionRationaleOptions
.builder()
.title("温馨提示")
.rationale("(游戏)需要访问手机的存储空间,用于游戏资源更新等\\n\\n请在系统设置界面-应用权限,开启访问存储空间的权限")
.ok("去开启")
.cancel("取消")
.build();
// 构建申请权限对应参数
OmniSDKRequestPermissionsOptions opts = OmniSDKRequestPermissionsOptions
.builder()
.showApplyDialog(true)
.timeLimit(0)
.permissionsList(permissions)
.applyDialog(applyDialog)
.guideToSettingDialog(guideDialog)
.build();
OmniSDKv3.getInstance().requestPermissions(appActivity, opts, result -> {
if (result.isSuccess()) {
OmniSDKRequestPermissionsResult requestResult = result.get();
Log.i(tag, "onExternalStorage: " + result.get());
} else {
OmniSDKError error = result.error();
Log.e(tag, "onExternalStorage error:" + error);
}
});

v2参数requestJson字符串 与 v3OmniSDKRequestPermissionsOptions字段的差异

v2v3描述
grouppermissionsList需要请求具体权限字符串集合
timeLimittimeLimit请求申请权限的时间间隔 单位 小时
applyDialogapplyDialog是否使用 OmniSDK 内部弹窗,特殊权限必弹
showDialogshowApplyDialog需要请求具体权限字符串集合
guideDialogguideToSettingDialog引导用户去设置界面开启权限的弹窗文案
specialDialog废弃特殊权限引导用户到权限设置界面

社交 API

分享

提示

以下示例:

// 1.本地图片,通常使用应用私有存储目录 通常使用应用私有存储目录:activity.getExternalFilesDir(null).getPath()
String imageUri = activity.getExternalFilesDir(null).getPath() + "/{local_image}";
// 2.网络图片地址 可下载访问的有效图片链接
// String imageUri = "https://xxx.xxx.xxx/xxx/003yHo7Nly1h6s53ckfoej63402c01l002.jpg";
OmniSDKSocialShareOptions opts = OmniSDKSocialShareOptions.builder()
.platform(OmniSDKSocialSharePlatform.SYSTEM)
.title("title")
.description("description")
.imageUrl(imageUri)
.build();
OmniSDKv3.getInstance().socialShare(activity, opts, result -> {
if (result.isSuccess()) {
// 分享成功
Log.i(tag, "share successfully");
callback.onSucceeded("success");
} else {
OmniSDKError error = result.error();
Log.e(tag, error.toString());
// 分享失败
callback.onFailed(error);
}
});

v2分享功能配置 ShareParam 与 v3OmniSDKSocialShareOptions字段的差异

v2v3描述
titletitle标题文本
descriptiondescription具体描述文本
typeplatform分享平台
linklinkUrl分享内容 URL
imageUriimageUrl分享图片 URL
imageType废弃图片类型

角色信息变更

OmniSDKRoleInfo

v2 角色信息 RoleInfo 与v3 OmniSDKRoleInfo 字段差异

v2v3描述
uiduserId角色等级;游戏必须传入真实的角色等级
zoneIdserverId游戏服务id
serverNameserverName游戏服务名称
roleIdroleId角色ID
roleNameroleName角色名
roleLevelroleLevel角色等级;游戏必须传入真实的角色等级
roleVipLevelroleVipLevel角色 VIP 等级
uid废弃用户D,游戏必须使用登录时 SDK 返回的 uid
zoneId废弃游戏区ID
zoneName废弃游戏大区名称:要与界面显示名称一致;如:界面显示(一区 桃园结义);zoneName 也必须传(一区 桃园结义);UC 渠道要求必传真实值,否则无法通过审核
roleType废弃角色类型;如法师,道士,战士
roleCreateTime废弃角色创建时间(Unix 时间戳,单位秒);如:1461722392;UC 渠道要求必传真实值,否则无法通过审核
partyName废弃公会名
gender废弃角色性别:m,f,分别代表男女
balance废弃角色账户余额

错误码

v3 错误码