iOS SDK API Reference
XDCommonSDK (核心库)
命名空间
#import <XDCommonSDK/XDCommonSDK.h>
获取 SDK 版本
NSString *xdsdkVersion = [XDGSDK getSDKVersionName];
// 也可直接使用 XDSDK_VERSION
初始化
[XDGSDK initSDK:^(BOOL success, NSString *msg) {
if (success) {
NSLog(@"Init success , %@", XDSDK_VERSION);
} else {
NSLog(@"Init fail , %@ , %@", msg, XDSDK_VERSION);
}
}];
是否初始化
BOOL isInitialized = [XDGSDK isInitialized];
打开客服中心
/** 当前已登录用户,打开客服中心
* @param serverId 服务器 ID,可为空
* @param roleId 角色 ID,可为空
* @param roleName 角色名,可为空
*/
[XDGSDK reportWithServerId:@"serverId" roleId:@"roleId" roleName:@"roleName"];
打开 App Store 评分
[XDGSDK storeReview];
获取当前用户所在区域信息
[XDGSDK getRegionInfo:^(XDGRegionInfo * _Nonnull info) {
// 国家代码
NSString *countryCode = info.countryCode;
// 时区
NSString *timeZone = info.timeZone;
// 城市
NSString *city = info.city;
// 位置信息来源,ip :ip 获取,sim:sim卡获取, locale:手机系统获取
NSString *locationInfoType = info.locationInfoType;
}];
埋点
/** 跟踪用户(默认当前用户的 xdid)
*/
[XDGSDK trackUser];
/** 跟踪用户
* @param userId xdUserId
*/
NSString *xdUserId = [XDGUser currentUser].userId;
[XDGSDK trackUser:xdUserId];
/** 跟踪用户
* @param userId xdUserId
* @param loginType 登录方式
* @param properties 自定义属性,可为空
*/
[XDGSDK trackUser:result.userId];
NSString *xdUserId = [XDGUser currentUser].userId;
LoginEntryType loginType = [XDGUser currentUser].loginType;
NSDictionary *properties = [NSDictionary dictionary];
[XDGSDK trackUser:xdUserId loginType:loginType properties:properties];
/** 跟踪角色
* @param roleId 角色id
* @param roleName 角色名称
* @param serverId 服务器id
* @param level 角色等级
*/
[XDGSDK trackRoleWithRoleId:@"roleId" roleName:@"roleName" serverId:@"serverId" level:1];
/** 跟踪自定义事件
* @param eventName 事件名称
*/
NSString *eventName = @"custom_event_name";
[XDGSDK trackEvent:eventName];
/** 跟踪自定义事件
* @param eventName 事件名称
* @param properties 自定义属性
*/
NSString *eventName = @"custom_event_name";
NSMutableDictionary *properties = [NSMutableDictionary dictionary];
[XDGSDK trackEvent:eventName properties:properties];
// 跟踪完成成就
[XDGSDK trackAchievement];
// 跟踪完成新手引导接口
[XDGSDK eventCompletedTutorial];
// 跟踪完成创角
[XDGSDK eventCreateRole];
推送
/** 设置当前用户推送是否打开
* @param enable 是否打开推送
*/
[XDGSDK setCurrentUserPushServiceEnable:enable];
// 获取当前用户推送是否打开
BOOL pushEnable = [XDGSDK isCurrentUserPushServiceEnable];
其他设置项
// 打开调试模式,debug 时会有更多日志输出
[XDGSDKSettings setDebugMode:YES];
/** 设置 SDK 显示语言
* @param locale 语言,在 XDGLanguageLocale 枚举中查看
*/
[XDGSDKSettings setLanguage:XDGLanguageLocaleSimplifiedChinese];
XDAccountSDK
命名空间
#import <XDAccountSDK/XDAccountSDK.h>
注册用户状态改变回调
[XDGAccount addUserStatusChangeCallback:^(XDGUserStateChangeCode userStateChangeCode, NSString *message) {
if (userStateChangeCode == XDGUserStateChangeCodeBindSuccess) {
// 绑定新平台成功
NSLog(@"TDSGlobalDEMO 绑定成功:%@", message);
[XDGAccount getUser:^(XDGUser *_Nullable result, NSError *_Nullable error) {
NSLog(@"TDSGlobalDEMO boundAccounts:%@", result.boundAccounts);
}];
} else if (userStateChangeCode == XDGUserStateChangeCodeUnBindSuccess) {
// 解绑平台成功
NSLog(@"TDSGlobalDEMO 解除绑定成功:%@", message);
[XDGAccount getUser:^(XDGUser *_Nullable result, NSError *_Nullable error) {
NSLog(@"TDSGlobalDEMO boundAccounts:%@", result.boundAccounts);
}];
} else if (userStateChangeCode == XDGUserStateChangeCodeLogout) {
// 用户退出登录
}
}];
无 UI 登录(推荐)
提示
使用本接口时需要游戏自行绘制各项登录按钮,建议游戏在完成初始化后先传入 LoginEntryTypeDefault 来请求自动登录,如果有已经登陆过的信息时会直接返回登陆成功,此时可直接进入游戏主页面,如果返回登录失败,此时再显示登录按钮,并请求对应接口。
// 可选的方式有
// Default : LoginEntryTypeDefault (自动登录)
// TapTap : LoginEntryTypeTapTap
// Apple : LoginEntryTypeApple
// Google : LoginEntryTypeGoogle
// Facebook : LoginEntryTypeFacebook
// Line : LoginEntryTypeLine
// Twitter : LoginEntryTypeTwitter
// Guest : LoginEntryTypeGuest
LoginEntryType type = LoginEntryTypeDefault;
[XDGAccount loginByType:type loginHandler:^(XDGUser * _Nullable result, NSError * _Nullable error) {
if (error) {
// 登录失败
} else {
// 登陆成功
// 建议登陆成功后调用 trackUser
[XDGSDK trackUser];
}
}];
UI 登录(不推荐)
// UI 登录必须配置登录选项,有如下7种可选,支持自由组合,添加顺序影响 UI 展示顺序
XDGLoginEntriesConfig *config = [XDGLoginEntriesConfig new];
[config.loginEntryList addObject:TDSGLOBAL_TAPTAP_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_APPLE_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_GOOGLE_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_FACEBOOK_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_LINE_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_TWITTER_ENTRY];
[config.loginEntryList addObject:TDSGLOBAL_GUEST_ENTRY];
[XDGAccount loginWithConfig:config handler:^(XDGUser * _Nullable result, NSError * _Nullable error) {
if (error) {
// 登录失败
} else {
// 登陆成功
// 建议登陆成功后调用 trackUser
[XDGSDK trackUser];
}
}];
退出登录
[XDGAccount logout];
获取当前登录用户
[XDGAccount getUser:^(XDGUser *_Nullable result, NSError *_Nullable error) {
if (error) {
// 没登录
} else {
// 当前登录用户为 result
}
}];
打开用户中心
[XDGAccount openUserCenter];
注销 XD 账户
[XDGAccount accountCancellation];
绑定第三方授权
// 不支持自动登录和游客类型
[XDGAccount bindByType:bindType
bindHandler:^(BOOL success, NSError *_Nullable error) {
if (success) {
// 绑定成功
} else {
// 绑定失败
}
}];
检查第三方授权是否有效
// 目前仅支持 TapTap 和 Facebook 的授权检察
BOOL isTokenActive = [XDGAccount isTokenActiveWithType:LoginEntryTypeTapTap];
XDGUser 用户信息
@interface XDGUser : NSObject <NSCoding>
// 用户 id
@property (nonatomic,copy,readonly) NSString *userId;
// 用户名
@property (nonatomic,copy,readonly) NSString *name;
// 用户昵称
@property (nonatomic,copy,readonly) NSString *nickName;
// 用户头像
@property (nonatomic,copy) NSString *avatar;
// 当前登录来源
@property (nonatomic,copy,readonly) LoginEntryType loginType;
// 已绑定平台
@property (nonatomic,copy,readonly) NSArray<NSString *> *boundAccounts;
// 用户推送开关
@property (nonatomic,assign,readonly,getter=isPushServiceEnable) BOOL pushServiceEnable;
// 用户 token
@property (nonatomic,strong,readonly) XDGAccessToken *token;
XDPaymentSDK
该模块包含了 Apple 内购的相关接口
命名空间
#import <XDPaymentSDK/XDPaymentSDK.h>
查询商品
/** 查询商品价格,请等待回调之后再做下一次查询,否则可能造成数据错乱
* @param productIds 需要查询的商品名数组
*/
NSArray *procudtIds = @[@"com.xd.sdkdemo1.stone30", @"com.xd.sdkdemo1.stone50"];
[XDGPayment queryWithProductIds:procudtIds completionHandler:^(NSArray<XDGProductInfo *> * _Nullable result, NSError * _Nullable error) {
if (error) {
NSLog(@"查询失败 %@", error);
} else {
// 查询成功, result 是查询结果
}
}];
商品支付
/**
* @param orderId 订单ID。游戏侧订单号,服务端支付回调会包含该字段。如果无,传空字符串。
* @param productId 商品ID。到AppStore购买的商品ID
* @param roleId 角色ID。支付角色ID,服务端支付回调会包含该字段
* @param serverId 服务器ID。所在服务器ID,不能有特殊字符,服务端支付回调会包含该字段
* @param ext 透传参数。服务端支付回调会包含该字段。可用于标记区分充值回调地址 (此字段长度不能超过 255 个字符)
* @param completionHandler 支付结果处理
*/
[XDGPayment payWithOrderId:@"" productId:productId roleId:roleId serverId:serverId ext:@"gagag" completionHandler:^(XDGOrderInfo * _Nonnull orderInfo, NSError * _Nonnull error) {
if (error) {
// 支付失败
} else {
// 支付成功,为了确保可靠性,建议支付成功对接服务端回调
}
}];
商品信息
@interface XDGProductInfo : NSObject
// 本地化商品描述
@property(nonatomic,strong,readonly) NSString *localizedDescription;
// 本地化商品标题
@property(nonatomic,strong,readonly) NSString *localizedTitle;
// 价格
@property(nonatomic,strong,readonly) NSDecimalNumber *price;
// 价格本地化信息(包含货币符号等)
@property(nonatomic,strong,readonly) NSLocale *priceLocale;
// 商品ID
@property(nonatomic,strong,readonly) NSString *productIdentifier;
@end
订单信息
@interface XDGOrderInfo : NSObject
/// 游戏侧订单号
@property (nonatomic,copy,readonly) NSString *outTradeNo;
/// 商品 ID
@property (nonatomic,copy,readonly) NSString *productIdentifier;
/// 角色所在服务器 ID
@property (nonatomic,copy,readonly) NSString *serverId;
/// 角色 ID
@property (nonatomic,copy,readonly) NSString *roleId;
/// 当前订单所用货币
@property (nonatomic,copy,readonly) NSString *currency;
/// 当前订单价格
@property (nonatomic,strong,readonly) NSDecimalNumber *price;
@end
查询未完成订单
[XDGPayment queryRestoredPurchases:^(NSArray<XDGTransactionInfo *> * _Nonnull result) {
}];
恢复购买
XDGTransactionInfo *transInfo = [[XDGTransactionInfo alloc] init];
[transInfo setValue:transactionIdentifier forKey:@"transactionIdentifier"];
[transInfo setValue:productIdentifier forKey:@"productIdentifier"];
[XDGPayment restorePurchase:transInfo orderId:orderId roleId:roleId serverId:serverId ext:ext completionHandler:^(XDGOrderInfo * _Nonnull orderInfo, NSError * _Nonnull error) {
}];
查询补款订单数据
[XDGPayment checkRefundStatus:^(XDGRepayMentCode code, NSString * _Nullable msg, NSDictionary * _Nullable data) {
}];
补款弹窗
[XDGPayment checkRefundStatusWithUI:^(XDGRepayMentCode code, NSString * _Nullable msg, NSDictionary * _Nullable data) {
}];