跳到主要内容

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) {

}];