更新日期:2024-09-23QuickGame(App Store)客户端接入文档
支持平台:iPod Touch,iPhone,iPad
系统要求: iOS7.0+
支持框架: armv7、arm64
环境要求: xcode11.0+
在游戏内SDK 具体的展示方向由游戏的 delegate.window.rootviewcontroller 来决定
添加 SDK 文件夹下的所有文件到工程中,并选择游戏所在的 Target,如下图所示:
注意:如果游戏为 Unity 项目,针对使用 Unity version 2019.3 之后的版本导出的 xcode工程,由于工程中新增了 Target: UnityFramework,导入 SDK 文件时,需要将 SDK 中所有的.framework 和.a 文件添加到 UnityFramework 这个Target;只需要将.bundle 图片等资源文件添加到游戏对应的Target
如下图所示:
游戏内支持购买自动订阅型商品或者需要检测苹果退款时,需要在苹果后台配置服务器通知网址,URL 格式:xxx/notify/apple。其中xxx为厂商sdk的完整域名,必须带 https。
配置时需选择“版本1”示例如下图:
另外,游戏内支持购买自动订阅型商品还需要在 QuickGame 后台产品详情里配置苹果后台的共享密钥
获取苹果后台生成共享秘钥的入口:
特别说明:请参照接入文档接入,如有疑问可参考demo,最终以demo为准
添加 SDK ,将 SDK 文件夹导入 xcode 工程中;选择正确的 target
在Build Settings->Linking->Other Linking Flags 中配置 –ObjC
将应用的Bundle identifer添加到URL scheme
SDK默认只需要添加相册权限用于保存游客账号信息,info.plist 配置以下内容
如果需要使用 QuickAD 广告统计,还需要添加 ATT 权限用于获取 idfa
如果带有 Quick 云客服系统,需要添加相机和相册权限用于给客服人员发送图片信息
接入说明: 可参考 sdk 附带的 demo 和本文档进行接入
/**
* @brief SDK 平台初始化方法(必接)
* @param productCode 产品 code
* @param completion 初始化结果回调
*
**/
+ (void)initWithProductCode:(NSString *)productCode
completion:(KInitResultBlock)completion; 功能:使用产品id,初始化SDK。 参数:productCode,产品id,必填,对接商务提供
代码实例:
[JySDKManager initWithProductCode:SDK_PRODUCT_CODE completion:^(Status_CODE
retCode) {
if (retCode == kInitSuccess) {
NSLog(@"初始化成功");
} else {
NSLog(@"初始化失败,错误码:%d",retCode);
}
}];
在- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 调用
[JySDKManager initQkAd:@"你的 quickad 参数"];
参数传入 Productcode 在 QuickSDK聚合后台获取,AD 仅需要初始化,SDK 内部会自行实现统计
/**
* @brief 调起登录界面(必接)
* @param success 登录成功结果回调,返回用户信息
* @param failure 登录失败结果回调
*/
+ (void)loginWithSuccBlock:(KLoginResultBlock)success
failBlock:(KLoginFailResult)failure;
功能:进入用户登录页面。需要在初始化成功之后调用,否则调用无效。游戏开始时可以调用此接口显示一个用户登录界面。在收到用户注销回调后通常处理办法是回到游戏登录界面调用后调用此接口。
实例代码:
[JySDKManager loginWithSuccBlock:^(NSDictionary *resultDic) {
NSString *code = [resultDic objectForKey:@"code"];
NSString *token = [JySDKManageruserToken];
switch (code.integerValue){
case kErrorNone:{
NSString *userid = [resultDic objectForKey:@"userId"];
NSLog(@"登录成功:n 用户 ID:%@,验证码:%@",userid,token);
if([JySDKManager isGuest]){
NSLog(@"是游客登录");
}else{
NSLog(@"非游客登录");
}
// 登录成功, 上传角色信息
GameRole *role = [GameRole new];
role.roleId = @"testRoleid"; /// 必传
role.role_name = @"testRoleName";
role.serverId = @"1";
role.sv_name = @"testServer";
role.role_level = @"testRoleLevel";
role.vipLevel = @"testVipLevel";
[JySDKManager updateRoleInfo:role];
NSString * age = JySDKManager.getCurrentUserAge;
NSLog(@"当前用户 UID=%@,年龄=%@", JySDKManager.userId, age);
}
break;
default:
break;
}
} failBlock:^(NSString *message) {
NSLog(@"登录失败:%@",message);
}];
/**
* @brief 购买接口(必接)
*
* @param param 充值参数
* @param completion 购买结果回调
*
**/
+ (void)getGoodWithParam:(GoodParam*)param
completion:(KPyResultBlock)completion;
功能:调起苹果内购
参数:param 充值信息,参考 GoodParam.h 文件
注意:其中扩展参数请勿传特殊符号,如果无法避免建议先进行 base64 编码后再传
说明:异步充值,sdk 通知的结果仅供参考,以服务器端同步为准
/** 静默登录,不显示登录界面
* @param isShowFloatMenu 是否显示浮标
* @param success 登录成功回调,包含用户相关信息
* @param failure 登录失败回调
*/
+ (void)loginAsGuestWithFloatMenuShow:(BOOL)isShowFloatMenu
successBlock:(KLoginResultBlock)success failBlock:(KLoginFailResult)failure;
功能:静默登录 SDK,不显示登录界面。需要在初始化成功之后调用,否则调用无效
参数:isShowFloatMenu 通过传入参数 YES 或者 NO 控制是否显示浮标
failure:登录失败回调,回调参数为字符串类型为失败原因
代码调用示例:
[JySDKManager loginAsGuestWithFloatMenuShow:YES successBlock:^(NSDictionary
*resultDic) {
NSLog(@"静默登录成功,返回用户信息:%@",resultDic);
// 状态码 1000 代表登录成功;各状态码含义请查看 JySDKManager.h
NSString *code = [resultDic objectForKey:@"code"];
// 用户唯一 id
NSString *userId = [resultDic objectForKey:@"userId"];
//userToken 用户校验码
NSString *token = [JySDKManageruserToken];
// 用户名
NSString *account = [resultDic objectForKey:@"account"];
// 登录方式
NSString *loginType = [resultDic objectForKey:@"loginType"];
// 登录成功附带消息
NSString *message = [resultDic objectForKey:@"message"];
} failBlock:^(NSString *message) {
NSLog(@"静默登录失败,原因:%@",message);
}];
appdelegate 必须实现以下三个方法,可参考 demo
/** 微信 QQ 授权登录回调方法, 带第三方登录必接*/
+ (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void
(^)(NSArray
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
options:(NSDictionary *)options;
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)source annotation:(id)annotation;
info.plist 添加微信白名单,没有 LSApplicationQueriesSchemes就添加一个
新版微信需要,2020 年 4 月后接入的需要
微信对 Universal Links 配置要求
a)Universal Links 必须支持 https
b)UniversalLinks 配置的 paths 不能带 query 参数
c)微信使用 Universal Links 拉起第三方 App 时,会在 Universal Links 末尾拼接路径和参数,因此 App 配置的 paths 必须加上通配符/*
在 Signing & Capabilities 添加 Associated Domains,内容: applinks:域名,注意:这里域名不带 https
将微信 appid 参数添加到 info.plist 文件的 URL scheme
初始化微信 SDK 在- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 调用
调用示例:
[JySDKManager initWxLogin:@"wxbacbb624a09218cd"
appSecret:@"55e28c7aa650cad991ab918371bab7b4"
universalLink:@"https://dl.sxyxserver.com/mqyy/apple-app-site-association/"]
;
[JySDKManager wxShareResult:^(NSDictionary * _Nonnull resultDic){
NSString * msg = [resultDic objectForKey:@"msg"];
if ([msg isEqualToString:@"succ"]) {
NSLog(@"分享成功");
}
else if ([msg isEqualToString:@"cancel"]) {
NSLog(@"用户取消分享");
} else {
NSLog(@"分享失败");
}
}];
返回参数类型:字典
键:msg
值:succ 分享成功
fail 分享失败
cancel 用户取消分享
+ (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void
(^)(NSArray
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
options:(NSDictionary *)options;
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)source annotation:(id)annotation;
info.plist 添加 QQ 白名单 –info.plist 没有 LSApplicationQueriesSchemes 就添加一个
将 QQ 的 appid 参数前面拼接 tencent 添加到 info.plist 文件的 URL scheme, 例如 appid 为1106580949,则配置如下图所示
初始化 QQSDK 在- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 调用
代码调用示例:
[JySDKManager initQQLogin:@"1106580949" universalLink:@"universalLink"];
10.1. 加入系统依赖库 AuthenticationServices.framework
10.2. 登录开发者网站,在需要添加Sign in with Apple 功能的 Identifier 开启功能
10.3. Xcode 里面 Signing & Capabilities 开启 Signin with Apple 功能
如果要在登录界面支持显示阿里云一键登录,需在调用登录之前调用如下接口设置阿里云一键登录秘钥,并且工程需配置正确的 bundleid
/**
* @brief 设置阿里云手机号一键登录参数,需在调用 SDK 登录接口之前设置
* @param authInfo 阿里云手机号一键登录秘钥
*
**/
+ (void)setPhoneFastLoginAuthInfo:(NSString *)authInfo;
如果要在登录界面支持显示 UCloud 一键登录,需在调用登录之前调用如下接口设置UCloud 一键登录 APPID,并且工程需配置正确的 bundleid
/**
* @brief 设置 UCloud 手机号一键登录参数,需在调用 SDK 登录接口之前设置
* @param appid UCloud 手机号一键登录 Appid(UCloud 号码认证平台申请)
*
**/
+ (void)setUCloudLoginWithAppId:(NSString *)appid;
注:UCloud 登录对应的库文件 UnvsSDK.framework为动态库,xcode 工程里需将该文件设置为 Embed & Sign。如下图所示:
/**
* @brief 设置 UCloud 登录页屏幕方向,默认竖屏
**/
+
(void)setUCloudLoginUIInterfaceOrientation:(UIInterfaceOrienta
tion)faceOrientation;
如果要在登录界面支持显示易盾一键登录,需在调用登录之前调用如下接口设置参数,并且工程需配置正确的bundleid
/**
* @brief 设置易盾手机号一键登录参数,需在调用SDK登录接口之前设置
* @param businessID 易盾分配的业务方ID(易盾平台申请),需与bundleID配套
**/
+ (void)setYiDunLoginWithBusinessID:(NSString *)businessID;
如果要在登录界面支持显示 TapTap 登录,需在调用登录之前调用如下接口设置TapTap 登录 clientID,并且工程需配置正确的bundleid
/**
* @brief 设置 TapTap登录参数,需在调用 SDK 登录接口之前设置
* @param clientID TapTap 后台 clientID 参数
*
**/
+ (void)setTapSDKWithClientID:(NSString *)clientID;
代码示例:
[JySDKManager setTapSDKWithClientID:@"s4amo8nzwsuh0itvlo"];
注:TapTap 登录对应的库文件 LeanCloudObjc.framework 为动态库,xcode 工程里需将该文件设置为 Embed & Sign。如下图所示:
AppDelegate.m 文件中必须接入以下方法:
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
options:(NSDictionary *)options;
+ (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)source annotation:(id)annotation;
info.plist 添加 TapTap 白名单 –info.plist 没有 LSApplicationQueriesSchemes 就添加一个
将 TapTap的 clientID 参数前面拼接 tt 添加到 info.plist 文件的 URL scheme, 例如 clientID为 s4amo8nzwsuh0itvlo,则配置如下图所示:
/**
* 设置区服角色信息,上传角色信息(必接)
*/
+ (void)updateRoleInfo:(GameRole *)roleInfo;
功能:设置角色信息,在选择角色进入游戏时调用
/**
* 获取用户 id。如未登录,返回空。
*/
+ (NSString *)userId;
功能:获取当前登录用户的用户 ID。在用户登录成功后调用
返回值:当前登录用户的用户 ID,未登录返回 nil
/** 获取当前登录用户年龄 */
+ (NSString *)getCurrentUserAge;
功能:获取当前登录用户的用户年龄。在用户登录成功后调用
返回值:当前登录用户的用户年龄,未登录或者未实名返回 0
/**
* 获取用户校验码,用于到服务器端验证用户真实性。
*/
+ (NSString *)userToken;
功能:获取当前登录用户的用户 token。用户登录成功时调用
返回值:当前登录用户的用户 token,用以验证用户有效性,未登录返回 nil
/**
* 退出登录,注销 SDK 账号,隐藏悬浮球
*/
+ (void)logout:(kLogoutBlock)block;
功能:立即将当前用户登出
设置退出登录回调方法,.h 设置KAcountDelegate 代理:
block 用户退出回调可以传 nil;
监听用户通过个人中心退出登录:
//设置代理,监听用户退出事件
[JySDKManager defaultManager].acountDelegate = self;
实现代理方法,监听用户退出和注册账号事件:
#pragma mark -- KAcountDelegate
- (void)userLogout:(NSDictionary *)resultDic
{
NSLog(@"用户从个人中心手动登出。n%@",resultDic);
[self login:nil];
}
- (void)userRegister:(NSString*)uid
{
NSLog(@"注册账号:%@",uid);
}
用户从个人中心注销时回调,这时应该回到游戏登录界面并调用 SDK 的登录接口,不应该调用快捷登录接口
/** 配置是否显示游客试玩 YES 显示 NO 隐藏默认显示*/
+ (void)configGuestLoginShow:(BOOL)show;
参数:show YES 不显示游客登录按钮 NO 展示游客登录按钮
/**
恢复已购买的非消耗品或者自动订阅商品
*/
+ (void)restoreNonConsumptionProducts:(KPyResultBlock)resultBlock;
回调字典 resutDic:
code == KorderRestoreSucc 恢复成功 extInfo 会附带恢复购买的 productid
code == KorderRestoreFail 恢复失败 message 会附带失败原因
/**
* 调起个人中心页面
**/
+ (void)showUserCenter;
功能:进入用户中心页面,显示关联其他平台账号的信息和操作入口
/**
* 调起客服中心页面
**/
+ (void)showServiceCenter;
显示悬浮窗
/** 显示浮悬窗 isLeft:是否在左边centery:中心点 y 值*/
+ (void)showFloatMenuBtnWithIsLeft:(BOOL)isleft
andWithCenterY:(CGFloat)centery;
isLeft:YES 在屏幕左边 NO 在屏幕右边
centery:悬浮窗中心点 Y 坐标
隐藏悬浮窗
/** 隐藏悬浮窗*/
+ (void)hideFloatMenuBtn;
设置悬浮窗半隐藏时透明度
/** 设置悬浮窗隐藏时透明度 alpha 为 0-1,0 透明 1 不透明*/
+ (void)configFloatAlpha:(CGFloat)alpha;
alpha:取值范围为 0 到 1 浮点数
/**注销当前账号 */
+ (void)deleteCurrentAccount;
功能:彻底删除当前账号,不可恢复
/** 设置是否自动登录,默认自动登录 YES*/
+ (void)setNeedAutoLogin:(BOOL)autoLogin;
yes 开启自动登录 NO 关闭自动登录
/** 实名认证回调须在实名认证之前设置 */
+ (void)completeRealName:(realNameResult)resultBlock;
block 回调:
isComplete yes 完成实名认证 no 未完成实名认证
age:用户实名认证成功返回实际年龄否则返回 0
source: 调起实名认证场景1 登录调起 2 用户主动调起3 支付调起 4 用户中心进入
代码调用示例:
[JySDKManager completeRealName:^(BOOL isComplete, NSInteger age, NSInteger
source) {
NSLog(@"%@年龄%ld",isComplete ? @"完成实名认证":@"未完成实名认证",
(long)age);
}];
注:该接口需在用户实名认证前设置
/** 用户是否已实名认证 */
+ (BOOL)isRealName;
返回值:
YES:已经实名认证
NO:尚未实名认证
须在登录成功之后调用
+ (void)removeListener;
tips:若游戏要自行实现内购苹果功能可调用该方法移除 SDK 内购监听,否则千万不要调用
/**
* 初始化 TapDB 接口(必接),调用该接口后默认统计了初始化,登录,支付,角色信息
* appid 注册游戏时获得的 APP ID
* currencyType 支付统计货币类型 , 参考 :币 人民币 CNY ,元 美元 USD ;元 欧元 EUR , 传空时默认@"CNY"
*/
+ (void)tapDBInitWithAppID:(NSString *)appid currencyType:(NSString
*)currencyType;
/**
* 自定义事件(选接) ,统计 TapDB 其他自定义事件,按需选接
* eventCode 事件 code ,需要在控制后台预先配置
* properties 事件属性,具体字段需要在控制后台预先配置
*/
+ (void)tapDBEvent:(NSString *)eventCode properties:(NSDictionary
*)properties;
/**
* 初始化 appsflyer (必接)
* @param devKey AppsFlyer devKey
* @param appID AppsFlyer appID
* @param Sandbox 支付验证是否用沙盒模式,不传默认为 NO( 正式模式), 注意:出正式提审包时一
定要设置为 NO
* *@param currency 设置 AF 统计货币类型,可传 nil 或空字符串则使用默认的 USD
*/
+ (void)setAppsFlyerDevKey:(NSString *)devKey appleAppID:(NSString*)appID
useReceiptValidationSandbox:(BOOL)Sandbox currencyType:(NSString *)currency;
/**
*AppsFlyer 自定义事件接口(选接)
*
@param eventName 自定义事件名从 从 AppsFlyerLib.framework 的`AppsFlyerTracker.h` 的预
定义常量中获取
@param values 参数字典(可传空),key 值从`AppsFlyerTracker.h` 的预定义常量中获取
调用示例:
[REDeLoginKit afTrackEvent:AFEventPurchase
withValues: @{AFEventParamRevenue : @200,
AFEventParamCurrency : @"USD",
AFEventParamQuantity : @2,
AFEventParamContentId: @"092",
AFEventParamReceiptId: @"9277"}];
*/
+ (void)afTrackEvent:(NSString*)eventName withValues:(NSDictionary *
_Nullable)values;
/** 获取 AppsFlyerUID (选接)*/
+ (NSString *)getAppsFlyerUID ;
描述:sdk 支持自定义背景图以及自定义文本颜色
登录界面顶部默认为文字标题(登录),可自行更改为 logo 图片
logo 位置顶部居中。名称设为 logo_head@2x.png, logo_head @3x.png 放置到jywlRes.bundle 文件夹内即可
logo_head @2x.png 尺寸为:320*72
logo_head @3x.png 尺寸为:480*108
Bundle 里面图片都可以替换,找到需要替换的图片,新建一个同名同尺寸的图片替换即可。其中 sdk 背景图片名称前缀为 log_back
自定义颜色设置
颜色设置统一采用 16 进制
在 bundle 中找到 ColorStyle.plist文件,修改对应位置颜色设置。建议根据背景图片来配置
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538