# 接入
# 账号接入
Cocoapods 引入 MachbirdKit,Podfile 中添加对应的 source 及 Pod 库,执行pod update
source 'https://cdn.cocoapods.org/' source 'https://de5c5537444e6fe278ea3525c5d111e9ba90e4a3@github.com/machbirdx/spec.git' pod 'XALFrameworks/MachbirdKit/UI' pod 'XALFrameworks/Bridge' pod 'XALFrameworks/APSUnityBridgeSDK'在项目跟目录放置 Configurations.plist 配置文件,配置文件统一有运营对接人员提供。
支持苹果 ID 登录(需要对应 bundleID 下支持 Sign In with Apple),需要在 XCode->TARGETS->Signing & Capabilities 中配置 Sign In with Apple
支持多语言,需要:
在 XCode->PROJECT->Info->Localizations 中添加对应语言,
主工程添加 InfoPlist.strings 文件,设置 English 为 Base,再添加简体中文,繁体中文。
分别在 InfoPlist.strings 文件的不同语言文件中添加
CFBundleDevelopmentRegion = "en";或"zh"、"zh-Hant"。
配置 Info.plist
在 Info.plist 中设置 FacebookAppID,设置 FacebookDisplayName。
TARGETS->Info->URL Types->添加一个 URL Type->URL Schemes 中添加 fb 后边带 FacebookAppID,如图所示

引入头文件
#import <MachbirdKit/MachbirdKit.h>,具体提供的方法注释见头文件。
在 Info.plist 中配置MachbirdKitAppID。
Info.plist 中增加 App Transport Security Settings->Allow Arbitrary Loads 为 YES。如果 有使用 http 的话。
XCode->TARGETS->Build Settings->Enable Bitcode->NO。
Info.plist 中配置 adjust_token。
苹果后台配置

# 支付接入
source 'https://cdn.cocoapods.org/'
source 'https://de5c5537444e6fe278ea3525c5d111e9ba90e4a3@github.com/machbirdx/spec.git'
pod 'XALFrameworks/VegaIAPSDK'
# 账号接口
# 初始化
描述:初始化 SDK,需要在didFinishedLaunching中调用。
调用示例:
[MachbirdKit initSDK];
# 快速登录页
描述:实现快速登录页面的显示。
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startEasyLoginWithSuccess:^(APSAccountResultData * _Nonnull accountResultData, BOOL isRegister) {
} withFailure:^(NSError * _Nonnull error) {
}];
# Apple登录
描述:直接进行Apple登录
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startAppleLoginWithSuccess:^(APSAccountResultData * _Nonnull accountResultData) {
} withFailure:^(NSError * _Nonnull error) {
}];
# Facebook登录
描述:直接进行Facebook登录
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startFacebookLoginWithSuccess:^(APSAccountResultData * _Nonnull accountResultData) {
} withFailure:^(NSError * _Nonnull error) {
}];
# Email注册
描述:弹出Email注册弹框,注册成功自动为登录状态
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startEmailRegisterWithSuccess:^(APSAccountResultData * _Nonnull accountResultData) {
} withFailure:^(NSError * _Nonnull error) {
}];
# 自动登录
描述:首页展示时调用此接口进行自动登录操作。如果未登录则内部自动游客登录。
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit autoLoginWithSuccess:^(APSAccountResultData * _Nonnull accountResultData) {
} withFailure:^(NSError * _Nonnull error) {
}];
# 游客登录
描述:进行游客登录
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startGuestLoginWithSuccess:^(APSAccountResultData * _Nonnull accountResultData) {
} withFailure:^(NSError * _Nonnull error) {
}];
# 是否已登录
描述:是否已经登录
返回值:BOOL 类型,已经登录返回 YES,未登录返回 NO
调用示例:
BOOL isLogined = [MachbirdKit isLogined];
# 当前登录状态
描述:返回当前是苹果登录、facebook登录、还是邮箱登录、游客登录。
返回值:APSLoginStatus typedef NS_ENUM(NSInteger, APSLoginStatus) { APSLoginStatus_NotLogin = 0, APSLoginStatus_Anoymous, APSLoginStatus_Email, APSLoginStatus_Apple, APSLoginStatus_Facebook, };
调用示例:
APSLoginStatus loginStatus = [MachbirdKit loginStatus];
# 登出
描述:进行登出操作
参数:callback,登出完成的回调,登出成功 NSError 为 nil,登出失败 NSError 有内容。
调用示例:
[MachbirdKit logoutWithCallback:^(NSError * _Nonnull error) {
}];
# 展示账号信息
描述:进行游客登录
参数:
success:登录成功的回调,成功返回 APSAccountResultData 对象。
APSAccountResultData 的描述见 账号数据
failure:登录失败的回调,失败返回 NSError 对象
调用示例:
[MachbirdKit startAccountInfoWithSuccess:^(APSAccountResultData * _Nonnull accountResultData, BOOL isRegister) {
} withFailure:^(NSError * _Nonnull error) {
}];
# 获取账号数据
描述:获得当前登录的账号数据,使用前建议先判断 isLogined 为 YES
参数:
callback:获得账号成功的回调,
成功时 accountResultData 有内容,失败时 accountResultData 为 nil
APSAccountResultData 的描述见 账号数据
调用示例:
[MachbirdKit getAccountWithCallback:^(APSAccountResultData * _Nonnull accountResultData) {
}];
# 账号数据
supaNo:用户唯一 ID,nickname:昵称,upic:头像
调用示例:
[MachbirdKit getAccountWithCallback:^(APSAccountResultData * _Nonnull accountResultData) {
NSString *supaNo = accountResultData.supaNo;
NSString *nickname = accountResultData.nickname;
NSString *upic = accountResultData.upic;
}];
# 支付接口
# 初始化
推荐在应用完成启动的事件中进行初始化, 例如在didFinishLaunchingWithOptions事件中进行初始化操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions;
#import <VegaIAPSDK/VGIAPSDK.h>
//初始化iap sdk
VegaIAPConfiguration *config = [[VegaIAPConfiguration alloc] init];
config.appKey = @"6r2cqwox";
config.privateKey = @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIYho8b9vj3qEx9iDWieCB+3JadxHHxkFFIEta11XSoA+HpfWesrfrRHgn2fmMbBE5fBdbj8SBpYOysUztyibKsX/o4V4xHvaR66dJevfRUDA2NSIWbxFOOriCxOCmcQndpEuCblRdyo4Yxd+hwaAweWmfRV6UPCBoMxGeCOsem/AgMBAAECgYAwjHKELwmxzUyYmlvyFukn2ZmWbpl56Jt2SGAd5ZIQBwPo/yRDu52D0TJJGAArSG04C3z5tM7AQllAMariLyQXjxoo1cTKD119cf05bZYIgL4jonspAHcc26OKLjNgctD4qc0T10XWUNnaaCf6G903KHuCr85Yo150hnw7HX4zOQJBAMSViT8Fq5syHjWdJI2dsku3nPCB2V4PQ3uc4E/ijF05JNKmh1dXUwvcdLZvVaFNHr30zplL8GH6QU8cALSabi0CQQCuq+X8Q3v57stBLbTpkKq5NcbI5TM/jfAE60Q0JIX4PhxnqEC4YXTfz3704paDVlsYT7nVbOACrGRdQE3kM1cbAkBs5zJbGXcRyNf3d5CSa3QkghmNG0Ih227VAfk6CBUeZ9PAZsS/W/8DqSN3FYJok2KedQom3mzSumKHwsmZQ5wZAkBR2W891ImlxoYsFrTttcKqY06xGOX45BQS2gPtwyeb+c7pq+gX/mL79YlySzNoe/DX5ZQZNJmL5yhoohdd1cj9AkEAloKSNUH1OHVSJIaBV2llh6GC3IdjGoPjEhctQV4amVE1qoAejmyuyPjf4xDoLrinyqKJpFqWkCaD9cIOVUqbwA==";
config.vegaIAPURL = @"http://test-iap.apuscn.com/iap";
[VGIAPSDK initializeWithConfiguration:config completion:^{
//
NSLog(@"初始化完毕");
}];
# 获取商品
获取一次性商品接口
[VGIAPSDK getProductsAndSubscriptionsWithFilter:@"" completionHandler:^(NSError * _Nullable error, NSArray * _Nullable products) {
}];
# 发起应用内购买
//设置 supaNo 和 payload
[VGIAPSDK setUserId:self.supaNo payload:@"payload"];
__weak __typeof(self)weakSelf = self;
[VGIAPSDK purchase:@"ultimatepack099" quantity:1 completionHandler:^(NSUInteger resultCode, NSError * _Nullable error, NSDictionary * _Nullable order, NSUInteger serverTime) {
NSLog(@"支付完毕");
//resultCode = 200 即为成功
}];
# 数据统计
以下为游戏的打点模型,所有参数为非必填,不需要的参数可以传 NULL
# 进入游戏的主界面
/**
* 用户每次进入游戏的主界面时,主动调用。
*/
void gameMainPageShow(void);
# Adjust 打点
/**
* adjust打点
* @param token 事件token
*/
void logByAdjust(char *token)
/**
* adjust打点
*
* @param token 事件token
* @param callbackParameterKey 回调参数key
* @param callbackParameterValue 回调参数value
*/
void logByAdjustAndParamValue(char *token, char *callbackParameterKey, char *callbackParameterValue)
/**
* adjust打点
* @param token 事件token
* @param revenue 收入
* @param currency 货币
*/
void logRevenueByAdjust(char *token, double revenue, char *currency)
/**
* adjust打点
*
* @param token 事件token
* @param revenue 收入
* @param currency 货币
* @param callbackParameterKey 回调参数key
* @param callbackParameterValue 回调参数value
*/
void logRevenueByAdjustAndParamValue(char *token, double revenue, char *currency, char *callbackParameterKey, char *callbackParameterValue)
# 进入关卡、完成关卡和关卡失败
/**
* 进入关卡、完成关卡和关卡失败时,记录游戏的进度,主动调用。
* @param quest_index 关卡数或任务编号,必填。
* @param quest_status 当前的任务/关卡/副本的状态。
* 枚举值:
* a:表示任务开始。
* c:表示任务完成。
* f:表示任务失败。
* @param quest_id 当前的任务/关卡/副本的编号。
* @param quest_name 当前的任务/关卡/副本的名称。
* @param quest_type 当前的任务/关卡/副本的类型。
* 枚举值:
* main:表示主线任务。
* new:表示新手任务。
* sub:表示支线任务。
* @param progress 任务/关卡/副本内的进度。 若使用到该字段,则传值必须为0到100的数值。若未使用该字段,则传值为-1。
* @param times 次数。
* @param app_id 用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
* @param account_level 账户等级。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameQuest(char *app_id,
long quest_index,
char *quest_status,
char *quest_id,
char *quest_name,
char *quest_type,
long progress,
long times,
char *account_id,
char *account_level,
char *role_id,
char *server_id);
# 进入任务、完成任务和任务失败
/**
* 进入任务、完成任务和任务失败时,主动调用。
* @param name 任务编号,必填。
* @param type 当前任务的类型。
* 枚举值:
* main:表示主线任务。
* new:表示新手任务。
* sub:表示支线任务。
* @param status 当前任务的状态。
* 枚举值:
* a:表示任务开始。
* c:表示任务完成。
* f:表示任务失败。
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameTask(char *name,
char *type,
char *status,
char *account_id,
char *role_id,
char *server_id);
# 卡牌的获取、使用、卸下、升级
/**
* 卡牌的获取、使用、卸下、升级时,主动调用。
* @param card_name 卡牌名称,必填。
* @param action 卡牌的动作。
* 枚举值:
* acquire:表示获取卡牌。
* wield:表示使用卡牌。
* unwield:表示卸下卡牌。
* upgrade:表示升级卡牌。
* @param card_type 卡牌的类型。
* @param card_level 卡牌的等级。
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameCard(char *card_name,
char *action,
char *card_type,
char *card_level,
char *account_id,
char *role_id,
char *server_id);
# 装备的获取、使用、卸下、升级
/**
* 装备的获取、使用、卸下、升级时,主动调用。
* @param name 字符串 AA_equip_name 装备名称,必填。
* @param action 装备的动作。
* 枚举值:
* acquire:表示获取装备。
* wield:表示使用装备。
* unwield:表示卸下装备。
* upgrade:表示升级装备。
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameEquip(char *name,
char *action,
char *account_id,
char *role_id,
char *server_id);
# 道具或控件被点击
/**
* 游戏核心的道具或控件被点击时,主动调用。
* @param name 控件或按钮的名称
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameCoreClick(char *name,
char *account_id,
char *role_id,
char *server_id);
# 非用户操作
/**
* 记录游戏核心的非用户操作,主动调用。
* @param name 操作名称
* @param status 操作状态
* 枚举值:
* a:表示任务开始。
* c:表示任务完成。
* f:表示任务失败。
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameCoreOperation(char *name,
char *status,
char *account_id,
char *role_id,
char *server_id);
# 页面或控件被展示
/**
* 游戏核心的页面或重点关注的控件被展示时,主动调用。
* @param name 页面或控件名称
* @param account_id 账户id,唯一标识一个账户。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameCoreShow(char *name,
char *account_id,
char *role_id,
char *server_id);
# 成功购买或出售游戏物品
/**
* 当用虚拟货币成功购买或出售某游戏物品时,主动调用。
* @param item_name 游戏内交易的虚拟物品的名称。
* @param item_num 交易的数量。
* @param item_total_price 交易的总价。
* @param deal_type 交易类型,默认是购买。
* 枚举值:
* buy:购买。
* sell:出售。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
* @param account_level 字符串 AA_account_level 账户等级。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gameEconomy(char *app_id,
char *item_name,
long item_num,
double item_total_price,
char *deal_type,
char *account_id,
char *account_level,
char *role_id,
char *server_id);
# 充值成功
/**
* 用户使用真实货币充值成功后,主动调用。
* @param transaction_id 交易的流水号。
* @param payment_type 支付类型。
* @param currency_type 货币类型。
* @param virtual_coin_num 充值获得的游戏货币的数量。
* @param iap_name 游戏内购买道具的名称。
* @param iap_num 游戏内购买道具的数量。
* @param real_coin_num 支付的真实货币的金额。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
* @param account_level 账户等级。
* @param role_id 角色Id
* @param server_id 服务器Id
*/
void gamePayment(char *app_id,
char *transaction_id,
char *payment_type,
char *currency_type,
long virtual_coin_num,
char *iap_name,
long iap_num,
double real_coin_num,
char *account_id,
char *account_level,
char *role_id,
char *server_id);
# 广告打开前后
/**
* 记录广告打开前后的事件,主动调用。
* @param trigger 广告的触发场景。
* @param status 状态。
* 枚举值:
* ready:记录广告准备。
* open:记录广告打开。
* close:记录广告关闭。
* content_show:记录广告内容的展示。
* content_click:记录广告内容的点击。
* rewarded:激励视频播放完成。
* @param is_ready 是否有缓存。
* 枚举值:
* 0:表示无缓存。
* 1:表示有缓存。
* @param ad_type 广告类型。
* 枚举值:
* reward:表示激励视频广告。
* interstitial:表示插屏广告。
* banner:表示横幅广告。
* native:表示原生广告。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
*/
void gameAdvOperation(char *app_id,
char *trigger,
char *status,
long is_ready,
char *ad_type,
char *account_id);
# 用户注册成功
/**
* 当用户注册成功后,主动调用。
* @param gender 注册时获取到的用户性别。
* 枚举值:
* O:表示未填写。
* M:表示性别男。
* F:表示性别女。
* @param age 注册时获取到的用户年龄。
* @param account_type 账户类型,例如自有系统账户,三方系统账户,游客等。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
*/
void gameRegister(char *app_id,
char *gender,
long age,
char *account_type,
char *account_id);
# 用户登录成功
/**
* 当用户登录成功后,主动调用。
* @param account_level 账户等级。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
* @param server_id 服务器id,标识所在的服务器。
* @param role_id 角色id,标识一个角色。
*/
void gameLogin(char *app_id,
char *account_level,
char *account_id,
char *server_id,
char *role_id);
# GDPR 页面展示、同意或不同意
/**
* 当GDPR页面展示、同意或不同意后,主动调用。
* @param action 表示GDPR页面的相关动作。
* 枚举值:
* page_show:表示GDPR页展示。
* agree:表示GDPR页面点击了同意。
* disagree:表示GDPR页面点击了不同意。
*/
void gameGdpr(char *action);
# 游戏 BI 的打点分析功能
/**
* 记录自定义事件,用于游戏BI的打点分析功能,主动调用。
* @param name 自定义事件的名称。
* @param custom_params 自定义的参数Key和Value,传Json字符串。
* @param app_id 应用id,唯一标识一个应用。
* @param account_id 账户id,唯一标识一个账户。
*/
void gameEvent(char *app_id,
char *name,
char *custom_params,
char *account_id);