更新日期:2024年 06月 17日海外版iOS接入文档
<h3>
<span style="font-size:16px;">一、SDK结构 </span>
</h3>
<p>
<span style="font-size:14px;"><span style="color:#E53333;"><br />
</span></span>
</p>
<p>
<span style="font-size:14px;"><span style="color:#E53333;">请参照文档接入,如有疑问请参考 demo,最终以 demo 为准。</span> </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">JYouLoginKit.framework 和 SSBundle.bundle 为 SDK 核心框架和资源。 </span>
</p>
<p>
<span style="font-size:14px;">支持平台: iPod Touch,iPhone,iPad。</span>
</p>
<p>
<span style="font-size:14px;">系统要求:iOS9.0+。</span>
</p>
<p>
<span style="font-size:14px;">支持框架: armv7 arm64。</span>
</p>
<p>
<span style="font-size:14px;">环境要求: xcode12.0+ 。</span>
</p>
<span style="font-size:14px;"> </span><br />
<h3>
<span style="font-size:16px;">二、注意事项 </span>
</h3>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">游戏内支持购买自动订阅型商品或者需要检测苹果退款时,需做如下配置: </span>
</p>
<p>
<span style="font-size:14px;">在苹果后台配置服务器通知网址,URL格式为:xxx/notify/apple(其中 xxx 为厂商sdk的完整域名,必须带 https),配置示例如下图: </span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025124245tJV0320.jpg" alt="" /><br />
</span>
</p>
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">另外,游戏内支持购买自动订阅型商品还需要在 QuickGame 后台产品详情里配置苹果后台的共享密钥:</span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025124406mC9V399.jpg" alt="" /><br />
</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">获取苹果后台生成共享秘钥的入口: </span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025124448pPgP999.jpg" alt="" /><br />
</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;color:#E53333;">注意:订阅型商品也需要在SDK后台配置商品ID</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;"> </span><br />
<h3>
<span style="font-size:14px;"><span style="font-size:16px;"><br />
</span></span>
</h3>
<h3>
<span style="font-size:14px;"><span style="font-size:16px;">三、接入步骤</span> </span>
</h3>
<h4>
<span style="font-size:14px;">3.1.添加SDK</span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">将SDK文件拖放导入工程,选择正确的target </span>
</p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/202110251246036vUb496.jpg" alt="" /><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.2.工程配置 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">在Build Settings->Linking->Other Linking Flags 中配置 -ObjC </span>
</p>
<p>
<br />
</p>
<p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025124654Dvas898.jpg" alt="" />
</p>
<span style="font-size:14px;"> </span><span style="white-space:pre;"> </span><br />
<h4>
<span style="font-size:14px;">3.3.添加系统依赖库 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;">支持苹果登录时需要添加:Accelerate.framework</span><span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.4.SDK权限申请 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">当支持数据统计时,如带有 Appsflyer,Adjust,FB 等数据统计SDK,需添加 ATT 权限,征得用户启用跟踪权限许可才能跟踪或访问其设备的广告标识符(即 IDFA)。 </span>
</p>
<p>
<span style="font-size:14px;">1.调用 SDK 提供的如下接口申请 ATT 权限 </span>
</p>
<p>
<span style="font-size:14px;">+ (void)requestTrackingAuthorization;</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">2.工程 info.plist 文件配置如下权限,右边的文案可自行定义 </span>
</p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025125019vWoV285.jpg" alt="" /><br />
<span style="white-space:pre;"> </span><br />
<h4>
<span style="font-size:14px;">3.5.配置SDK域名(<span style="color:#E53333;">特别重要!!!</span>) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;"><span style="color:#E53333;">找到 SDK内 SSBundle.bundle文件下 ColorStyle.plist新增/修改键值对(键为 mainurl值为请求的域名)。</span> </span>
</p>
<span style="white-space:pre;"> </span><br />
<h4>
<span style="font-size:14px;">3.6.SDK初始化(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 :</span><span style="white-space:pre;"> +(void)initSDKWithProductCode:(NSString*)productCode<br />
callback:(id<REDeInitCallback>)initDelegate; <br />
</span><span style="font-size:14px;">功能:使用产品 id,初始化 SDK。 </span>
</p>
<p>
<span style="font-size:14px;">参数:productCode,产品 id,必填,对接商务提供。 </span>
</p>
<p>
<span style="font-size:14px;">初始化成功回调方法: </span>
</p>
<span style="white-space:pre;">//<span style="white-space:pre;"> </span>SDK 初始化成功回调<span style="white-space:pre;"> </span><br />
-<span style="white-space:pre;"> </span>(void)qgSDKInitDone<span style="white-space:pre;"> </span><br />
{<span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span>NSLog(@"初始化成功");<span style="white-space:pre;"> </span><br />
}</span><span style="font-size:14px;"><br />
</span><span style="font-size:14px;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.7.设置是否需要自动登录(选接) </span>
</h4>
<p>
<br />
</p>
<p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025144030DP8E840.png" alt="" />
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">功能:是否启用自动登录上次登录的账号,需要在调用登录之前调用。默认开 启。 </span>
</p>
<span style="font-size:14px;"> </span><br />
<h4>
<span style="font-size:14px;">3.8.登录(必接) </span>
</h4>
<span style="font-size:14px;"> </span><br />
<p>
<span style="font-size:14px;">函数 : + (void)loginWithMenuShow<br />
:(BOOL)isDisplay;<br />
</span>
</p>
<div>
<br />
</div>
<span style="font-size:14px;">功能:</span><span style="font-size:14px;">进入用户登录页面。需要在初始化成功之后调用,否则调用无效。游戏开始时可以调用此接口显示一个 用户登录界面。在收到用户注销回调后通常处理办法是回到游戏登录界面调用后调用此接口。</span>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">isDisplay : YES:登录自动显示浮标 NO:登录不自动显示浮标<br />
</span>
</p>
<p>
<span style="font-size:14px;"> </span><span style="white-space:pre;"> </span>
</p>
<h4>
<span style="font-size:14px;">3.9.快捷登录(静默登录)—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : </span><span style="font-size:14px;">+ (void)fastlyStartGame; </span>
</p>
<span style="font-size:14px;">功能:不显示登录界面静默登录,如果本地没有账号将基于本设备创建一个新的游客 账号,可以在用户中心进行绑定和解绑操作、切换账号。如果调用此接口时 SDK 还没 有初始化成功,则 SDK 初始化成功时会自动调用此接口一次。快速进入游戏可以使用 此接口,用户注销后重新登录使用 login 接口。</span><span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.10.设置登录和登出回调监听者(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : </span><span style="white-space:pre;"> </span><span style="font-size:14px;">+ (void)setFunctionLoginCallback:(id<REDeLoginCallback>)loginDelegate; </span>
</p>
<p>
<span style="font-size:14px;">功能:设置登录回调监听者然后监听者实现如下的回调方法就可以收到登录事 件: </span>
</p>
<p>
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)loginUid:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)uid</span><span style="white-space:pre;"> </span><span style="font-size:14px;">userToken:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)token</span><span style="white-space:pre;"> </span>
</p>
<span style="font-size:14px;">{ </span><br />
<span style="white-space:pre;"> </span><span style="font-size:14px;">NSLog(@"登录成功:n 用户 ID:%@,验证码:%@",uid,token);</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">} </span><br />
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">// 用户从个人中心手动登出回调 -</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)userLogout</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">{ </span><br />
<span style="font-size:14px;"> NSLog(@"用户从个人中心手动登出"); </span><br />
<span style="font-size:14px;">} </span><br />
<span style="font-size:14px;"> </span><br />
<p>
<span style="font-size:14px;">// 个人中心绑定回调</span>
</p>
<p>
<span style="font-size:14px;"> - (void)bindUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type;</span>
</p>
<p>
<span style="font-size:14px;">//个人中心解绑回调</span>
</p>
<p>
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)unBindUid:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)uid</span><span style="white-space:pre;"> </span><span style="font-size:14px;">userToken:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)token</span><span style="white-space:pre;"> </span><span style="font-size:14px;">type:(USERCENTER_TYPE)type; </span>
</p>
<p>
<span style="font-size:14px;">tips:</span><span style="white-space:pre;"> </span><span style="font-size:14px;"> </span>
</p>
<p>
<span style="font-size:14px;">type</span><span style="white-space:pre;"> </span><span style="font-size:14px;">解绑类型 </span>
</p>
<p>
<span style="font-size:14px;">USERCENTER_TYPE_EMAIl</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">1,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//email</span>
</p>
<p>
<span style="font-size:14px;">USERCENTER_TYPE_FB</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">6,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//FB </span>
</p>
<p>
<span style="font-size:14px;">USERCENTER_TYPE_GOOGLEPLUS</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">8,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//Google </span>
</p>
<p>
<span style="font-size:14px;">USERCENTER_TYPE_Line</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">11,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//Line </span>
</p>
<p>
<span style="font-size:14px;">USERCENTER_TYPE_GAMECENTER</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">7,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//</span>
</p>
<p>
<span style="font-size:14px;">GameCenter USERCENTER_TYPE_Apple</span><span style="white-space:pre;"> </span><span style="font-size:14px;">=</span><span style="white-space:pre;"> </span><span style="font-size:14px;">16,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">//Apple </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.11.获取所有绑定信息—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : </span><span style="font-size:14px;">+ (NSDictionary *)getUserBindInfo;</span>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">功能:获取用户中心的绑定信息</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">
<table style="width:100%;" cellpadding="2" cellspacing="0" border="1" bordercolor="#000000">
<tbody>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">字典key</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">字典value</span><span style="white-space:normal;font-size:14px;">类型</span><span style="white-space:normal;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">字典key注释</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_EMAIl</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NSNumber</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">Email</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_FB</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NSNumber</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">Fac</span><span style="white-space:normal;font-size:14px;">eBook</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_GOOGLEPLUS</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NSN</span><span style="white-space:normal;font-size:14px;">umber</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">G</span><span style="white-space:normal;font-size:14px;">oogle </span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_Line</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NSN</span><span style="white-space:normal;font-size:14px;">umber</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">L</span><span style="white-space:normal;font-size:14px;">ine </span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_GAMECENTER</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NSNu</span><span style="white-space:normal;font-size:14px;">mber</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">Ga</span><span style="white-space:normal;font-size:14px;">meCenter</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">USERCENTER_TYPE_Apple</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">NS</span><span style="white-space:normal;font-size:14px;">Number</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">Ap</span><span style="white-space:normal;font-size:14px;">ple</span><br />
</td>
</tr>
</tbody>
</table>
</span><span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">代码实例: </span>
</p>
<p>
<span style="font-size:14px;"> NSDICTIONARY *DIC = [REDELOGINKIT GETUSERBINDINFO]; </span>
</p>
<p>
<span style="font-size:14px;">IF ([DIC[@"USERCENTER_TYPE_EMAIL"] BOOLVALUE]) {</span>
</p>
<p>
<span style="font-size:14px;"> NSLOG(@""#$%&");</span>
</p>
<p>
<span style="font-size:14px;"> } </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.12.设置角色信息(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (void)setGameRoleInfo:(REDeRoleInfo *)roleInfo; </span>
</p>
<p>
<span style="font-size:14px;">功能:设置角色信息,在选择角色进入游戏时调用。 </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.13.主动调用绑定账号—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (void)bindAccountType:(USERCENTER_TYPE)type; </span>
</p>
<p>
<span style="font-size:14px;">功能:在外部主动调用绑定账号。</span><span style="white-space:pre;"> </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.14.获取用户ID—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (NSString *)userID; </span>
</p>
<p>
<span style="font-size:14px;">功能:获取当前登录用户的用户 ID。在用户登录成功后调用</span><span style="white-space:pre;"> </span>
</p>
<span style="font-size:14px;">返回值:当前登录用户的用户 ID,未登录返回 nil。</span><span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.15.获取登陆后token—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (NSString *) getUserToken; </span>
</p>
<p>
<span style="font-size:14px;">功能:获取当前登录用户的用户 token。用户登录成功时调用</span><span style="white-space:pre;"> </span>
</p>
<p>
<span style="font-size:14px;">返回值:当前登录用户的用户 token,用以验证用户有效性,未登录返回 nil。 </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.16.获取当前用户是否是新用户</span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (BOOL)isNewUser; </span>
</p>
<p>
<span style="font-size:14px;">功能:获取当前用户是否为新用户 </span>
</p>
<span style="font-size:14px;">返回值:YES 为新用户,No 为已经注册用户。 </span><br />
<span style="font-size:14px;"> </span><br />
<h4>
<span style="font-size:14px;">3.17.退出登录—必接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 :+(void)logout; </span>
</p>
<p>
<span style="font-size:14px;">功能:立即将当前用户登出</span><span style="white-space:pre;"> </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.18.支付(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (void)IAPWithParameter:(REDeOrderInfo *)param; </span>
</p>
<p>
<span style="font-size:14px;">功能:进入充值模块。 </span>
</p>
<span style="font-size:14px;">参数:param</span><span style="white-space:pre;"> </span><span style="font-size:14px;">充值参数信息,参考 REDeOrderInfo .h 文件</span><span style="white-space:pre;"> </span><span style="font-size:14px;">,<span style="color:#E53333;">注意:</span><span style="color:#E53333;">其中扩展字段请勿传 特殊符号,如果无法避免建议先进行 base64 编码后再传;回调地址可后台配置,后台 配置了回调地址就以后台配置的为准</span></span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">说明:异步充值,sdk 通知的结果仅供参考,以服务器端同步为准。</span><span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.19.设置支付回调监听者(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : + (void)setFunctionBuyCallback:(id<REDeBuyCallback>)buyDelegate; </span>
</p>
<p>
<span style="font-size:14px;">功能:设置支付回调监听者然后监听者实现如下的回调方法就可以收到支付事件: </span>
</p>
<span style="font-size:14px;">//</span><span style="white-space:pre;"> </span><span style="font-size:14px;">支付成功回调</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)purchaseDoneProductId:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)productId</span><span style="white-space:pre;"> </span><span style="font-size:14px;">orderNo:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)orderNo</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">{</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><span style="font-size:14px;">NSLog(@"支付成功,订单号:%@",orderNo);</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">}</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">//</span><span style="white-space:pre;"> </span><span style="font-size:14px;">支付失败回调</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)purchaseFail</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">{</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><span style="font-size:14px;">NSLog(@"支付失败");</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">}</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.20.恢复购买非消耗品—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : +(void)restoreNonConsumptionProducts:(id<REDeRestoreCallback>)restoreDelegate; </span>
</p>
<p>
<span style="font-size:14px;">功能:获取已购买的非消耗商品或者订阅商品,商品信息通过回调返回,需实现如下回调方法: </span>
</p>
<br />
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><span style="white-space:pre;"> </span><span style="font-size:14px;">//恢复非消耗商品成功,返回商品 id 信息</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)restoreSuccess:(NSArray</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)products</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">{</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><span style="font-size:14px;">NSLog(@"已购买非消耗品:%@",products);</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">}</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">//恢复失败</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">-</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)restoreFail:(NSString</span><span style="white-space:pre;"> </span><span style="font-size:14px;">*)msg</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">{</span><span style="white-space:pre;"> </span><br />
<span style="white-space:pre;"> </span><span style="font-size:14px;">NSLog(@"恢复购买失败:%@",msg);</span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">}</span><span style="white-space:pre;"> </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.21.进入用户中心—按需选接 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">函数 : +</span><span style="white-space:pre;"> </span><span style="font-size:14px;">(void)</span><span style="white-space:pre;"> </span><span style="font-size:14px;">enterUserCenter; </span>
</p>
<p>
<span style="font-size:14px;">功能:进入用户中心页面,显示关联其他平台账号的信息和操作入口。</span><span style="white-space:pre;"> </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.22.应用跳转回调(必接) </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">类:REDeLoginKit</span>
</p>
<p>
<span style="font-size:14px;">函数: +(void)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options; </span>
</p>
<p>
<span style="font-size:14px;">功能:处理第 3 方应用回调结果</span><span style="white-space:pre;"> </span>
</p>
<span style="font-size:14px;">在- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;中调用类:REDeLoginKit </span><br />
<p>
<span style="font-size:14px;">函数: + (void)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation; </span>
</p>
<p>
<span style="font-size:14px;">功能:处理第 3 方应用回调结果</span><span style="white-space:pre;"> </span>
</p>
<span style="font-size:14px;">在- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation;中调用。 </span><br />
<br />
<span style="font-size:14px;"> </span><br />
<h4>
<span style="font-size:14px;">3.23.使用Fackbook登录 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">使用 1.7.1版本的 FBSDK,需要在工程中创建一个 swift文件,然后根据 Xcode 提示创建 OC和 swift桥接文件。 </span>
</p>
<p>
<span style="font-size:14px;">FacebookAppID:facebook后台应用参数 </span>
</p>
<p>
<span style="font-size:14px;">FacebookDisplayNam:facebook后台配置的应用名称{游戏名称} </span>
</p>
<p>
<span style="font-size:14px;">FacebookClientToken:在 facebook后台应用设置->高级查看 </span>
</p>
<p>
<span style="font-size:14px;">LSApplicationQueriesSchemes:Facebook相关白名单 </span>
</p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150153kQpH263.png" alt="" /><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">OpenUrl 回调</span><span style="white-space:pre;"> </span>
</p>
<p>
<br />
</p>
<p>
<img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150238FqEQ162.jpg" alt="" />
</p>
<br />
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><span style="white-space:pre;"> </span><br />
<span style="font-size:14px;">需要引入的 FacebookSDK 资源包:</span><span style="white-space:pre;"> </span><span style="font-size:14px;">FBSDKCoreKit.framework,</span><span style="white-space:pre;"> </span><span style="font-size:14px;">FBAEMKit.framework,FBSDKCoreKit_Basics.framework,FBSDKLoginKit.framework。 </span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">3.24.设置Google登录库 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">设置 info.plist 中的 GIDClientID </span>
</p>
<p>
<span style="font-size:14px;">在 info.plist 文件直接新增一个键为 GIDClientID、值为 google 后台的 clientID。 </span>
</p>
<span style="font-size:14px;"> <img src="https://staticsite.quickapi.net/data/newFiles/20240617/20240617113703pG1S200.png" alt="" /></span><br />
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">设置对应的 URL Scheme </span>
</p>
<p>
<span style="font-size:14px;">在登录可以运行之前,您需要设置一个 URL 类型来处理回调。</span>
</p>
<p>
<span style="font-size:14px;">在 info.plist->url types 新增一个 scheme,为反向 googleclientid,即您的 googleclientid 带有以点分隔的字段的顺序反转。例如: </span>
</p>
<p>
<span style="font-size:14px;">com.googleusercontent.apps.1234567890-abcdefg </span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150432okMz699.jpg" alt="" /><br />
</span>
</p>
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><br />
<h4>
<span style="white-space:pre;">3.25.</span><span style="font-size:14px;">使用Apple登录需要配置 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">根据苹果审核指南,应用包含 Facebook、google等三方登录时必须同时提供 apple登录。 </span>
</p>
<p>
<span style="font-size:14px;">1. 加入 AuthenticationServices.framework </span>
</p>
<p>
<span style="font-size:14px;">2.</span><span style="white-space:pre;"> </span><span style="font-size:14px;">登录开发者网站,在需要添加 Sign in with Apple 功能的 Identifier 开启功能</span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150536NW3K329.jpg" alt="" /> </span>
</p>
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;">3. Xcode</span><span style="white-space:pre;"> </span><span style="font-size:14px;">里面</span><span style="white-space:pre;"> </span><span style="font-size:14px;">Signing</span><span style="white-space:pre;"> </span><span style="font-size:14px;">&</span><span style="white-space:pre;"> </span><span style="font-size:14px;">Capabilities</span><span style="white-space:pre;"> </span><span style="font-size:14px;">开启</span><span style="white-space:pre;"> </span><span style="font-size:14px;">Sign</span><span style="white-space:pre;"> </span><span style="font-size:14px;">in</span><span style="white-space:pre;"> </span><span style="font-size:14px;">with</span><span style="white-space:pre;"> </span><span style="font-size:14px;">Apple</span><span style="white-space:pre;"> </span><span style="font-size:14px;">功能 </span><br />
<p>
<span style="font-size:14px;"> <img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150608iDnN205.jpg" alt="" /></span>
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;">3.26.</span><span style="font-size:14px;">账号注销 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025150657bned714.png" alt="" /><br />
</span>
</p>
<span style="font-size:14px;">功能:游戏开发者调用此SDK方法即会弹出确认注销账号界面,用户点击确认后,此账号下所 有数据会被清空。 </span><br />
<span style="font-size:14px;">点击浮标的个人中心页面也有账号注销入口,功能与直接调用此方法相同。 </span><br />
<p>
<span style="font-size:14px;"><span style="color:#E53333;">注:游客账号没有注销功能</span><span style="color:#E53333;">。</span></span>
</p>
<p>
<span style="font-size:14px;"> </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;">四、ATT(AppTrackingTransparency)与iOS14 </span>
</h3>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">4.1.ATT 权限获取</span><span style="white-space:pre;"> </span>
</h4>
<p>
<span style="white-space:pre;"><br />
</span><span style="font-size:14px;">从 iOS 14 开始,若开发者设置 App Tracking Transparency 向用户申请跟踪授权, 在用户授权之前 IDFA 将不可用。 </span>
</p>
<p>
<span style="font-size:14px;">要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。</span>
</p>
<p>
<span style="font-size:14px;">代码示例:</span>
</p>
<p>
<span style="font-size:14px;"> <key>NSUserTrackingUsageDescription</key> </span>
</p>
<p>
<span style="font-size:14px;"><string>该标识符将用于向您投放个性化广告</string> </span>
</p>
<p>
<span style="font-size:14px;">文案请根据自己实际需求填写,需要使用 Xcode12.0 及以上版本。 </span>
</p>
<p>
<span style="font-size:14px;">注:文案应使用与应用本地化语言一致的语言。 </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">SDK 获取权限方法 </span>
</p>
<p>
<span style="font-size:14px;">函数 : /** 申请 ATT 权限 */ + (void)requestTrackingAuthorization; </span>
</p>
<p>
<span style="font-size:14px;">功能:游戏开发者调用此SDK方法即会弹出申请att权限弹窗,建议在APP启动之后尽快调 用 </span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">4.2.SKAdNetwork</span><span style="white-space:pre;"> </span>
</h4>
<p>
<span style="white-space:pre;"><br />
</span>
</p>
<span style="font-size:14px;">SKAdNetwork 基础结构(Apple 的 iOS 的一部分)可帮助广告商在保持用户隐私(即用 户不同意 ATT 权限申请)的同时衡量广告系列的成功程度。SKAdNetwork 基础结构无需 IDFA 或其他广告 ID 即可运行。因此,无需用户同意即可实施该解决方案。 开发人员无需操作,SDK 会自动调用必要的 SKAdNetwork API,即 registerAppForAdNetworkAttribution()和 updateConversionValue()。 </span><br />
<span style="font-size:14px;"> </span><br />
<h4>
<span style="font-size:14px;">4.3.使用Fackbook数据统计</span>
</h4>
<p>
<span style="font-size:14px;"> </span>
</p>
<p>
<span style="font-size:14px;">FB的 SDK默认埋点 </span>
</p>
<p>
<span style="font-size:14px;">1.登录成功:fb_custom_login_user_name(自定义事件) </span>
</p>
<p>
<span style="font-size:14px;">2.注册来源 FBSDKAppEventParameterNameRegistrationMethod(标准事件) </span>
</p>
<p>
<span style="font-size:14px;">如需要其他事件可以选择下面接口,FB默认记录了 </span>
</p>
<p>
<span style="font-size:14px;">
<table style="width:100%;" cellpadding="2" cellspacing="0" border="1" bordercolor="#000000">
<tbody>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">应用安装</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">新用户首次激活应用程序或应用程序首次在特定设备上启动</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">应用启动</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">当有人启动您的应用程序时,Facebook SDK会初始化并记录事件。但是,如果第二个应 发生,则不会记录第二个应用程序启动事件</span><br />
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">在应用程序内购买</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">由 Apple App Store或 Google Play处理的购买完成后。如果您使用 其他付款平台,则需要手动添加购买事件代码</span>
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">Facebook SDK崩溃报告</span><span style="font-size:14px;">(仅适用于Facebook)</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">如果您的应用程序由于Facebook SDK而崩溃,则当重新启动应用 程序时,将生成崩溃报告并发送给Facebook。该报告不包含用户 数据,可帮助Facebook确保SDK的质量和稳定性。要选择不记录 此事件,<span style="color:#E53333;">请</span><span style="color:#E53333;">禁用自动记录的事件</span> </span><br />
</td>
</tr>
</tbody>
</table>
</span><span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">要禁⽤⾃动事件⽇志记录,可以在 FB后台关闭,也可以在 info.plist⽂件配置下⾯的键值 对: </span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025151559ziuA274.png" alt="" /><br />
</span>
</p>
<p>
<span style="font-size:14px;">/**</span>
</p>
<p>
<span style="font-size:14px;">* 完成教程的统计 </span>
</p>
<p>
<span style="font-size:14px;"> contentData 特点内容</span>
</p>
<p>
<span style="font-size:14px;">* contentId 特点内容id</span>
</p>
<p>
<span style="font-size:14px;">* success 是否完成教程</span>
</p>
<p>
<span style="font-size:14px;">* tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的标准打点事件,事件名:Complete Tutorial</span>
</p>
<p>
<span style="font-size:14px;">*/</span>
</p>
<p>
<span style="font-size:14px;">+ (void)logCompleteTutorialEvent:(NSString *)contentData</span>
</p>
<p>
<span style="font-size:14px;"> contentId:(NSString *)contentId</span>
</p>
<p>
<span style="font-size:14px;"> success:(BOOL)success;</span>
</p>
<p>
<span style="font-size:14px;"> /**</span>
</p>
<p>
<span style="font-size:14px;"> * 角色升级的统计</span>
</p>
<p>
<span style="font-size:14px;"> * level 角色等级</span>
</p>
<p>
<span style="font-size:14px;">* tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的标准打点事件,事件名:Achieve Level</span>
</p>
<p>
<span style="font-size:14px;"> */</span>
</p>
<p>
<span style="font-size:14px;"> + (void)logAchieveLevelEvent:(NSString *)level</span>
</p>
<p>
<span style="font-size:14px;"> /**</span>
</p>
<p>
<span style="font-size:14px;"> * 完成内购的统计</span>
</p>
<p>
<span style="font-size:14px;"> * purchaseAmount 商品价格</span>
</p>
<p>
<span style="font-size:14px;"> * currency 货币类型</span>
</p>
<p>
<span style="font-size:14px;"> * parameters 额外携带参数,value值应该是NSString或 NSNumber,@{@"order":@“orderid”}</span>
</p>
<p>
<span style="font-size:14px;"> * tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的标准打点事件,事件名:Purchase</span>
</p>
<p>
<span style="font-size:14px;"> */</span>
</p>
<p>
<span style="font-size:14px;"> + (void)logPurchase:(double)purchaseAmount</span>
</p>
<p>
<span style="font-size:14px;"> currency:(NSString *)currency</span>
</p>
<p>
<span style="font-size:14px;"> parameters:(NSDictionary<NSString *, id> *)parameters;</span>
</p>
<p>
<span style="font-size:14px;"> /**</span>
</p>
<p>
<span style="font-size:14px;"> * 成就解锁</span>
</p>
<p>
<span style="font-size:14px;"> * description 成就解锁的描述</span>
</p>
<p>
<span style="font-size:14px;"> * type 成就解锁类型</span>
</p>
<p>
<span style="font-size:14px;"> * tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的标准打点事件,事件名:Unlock Achievement</span>
</p>
<p>
<span style="font-size:14px;"> */</span>
</p>
<p>
<span style="font-size:14px;"> + (void)logUnlockAchievementEvent:(NSString *)description type:(NSString *)type;</span>
</p>
<p>
<span style="font-size:14px;"> /**</span>
</p>
<p>
<span style="font-size:14px;"> * 发起结账</span>
</p>
<p>
<span style="font-size:14px;"> * contentData 特点内容</span>
</p>
<p>
<span style="font-size:14px;"> * contentId 特点内容id</span>
</p>
<p>
<span style="font-size:14px;"> * contentType 成就解锁类型</span>
</p>
<p>
<span style="font-size:14px;"> * numItems 完成的单元数</span>
</p>
<p>
<span style="font-size:14px;"> * currency 货币类型</span>
</p>
<p>
<span style="font-size:14px;"> * totalPrice 总价</span>
</p>
<p>
<span style="font-size:14px;"> * tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的标准打点事件,事件名:Initiate Checkout</span>
</p>
<p>
<span style="font-size:14px;"> */</span>
</p>
<p>
<span style="font-size:14px;"> + (void)logInitiateCheckoutEvent:(NSString *)contentData</span>
</p>
<p>
<span style="font-size:14px;"> contentId:(NSString *)contentId</span>
</p>
<p>
<span style="font-size:14px;"> contentType:(NSString *)contentType</span>
</p>
<p>
<span style="font-size:14px;"> numItems:(NSInteger)numItems</span>
</p>
<p>
<span style="font-size:14px;"> paymentInfoAvailable:(BOOL)paymentInfoAvailable</span>
</p>
<p>
<span style="font-size:14px;"> currency:(NSString *)currency</span>
</p>
<p>
<span style="font-size:14px;"> valueToSum:(double)totalPrice;</span>
</p>
<p>
<span style="font-size:14px;"> /**</span>
</p>
<p>
<span style="font-size:14px;"> * 自定义事件</span>
</p>
<p>
<span style="font-size:14px;"> * eventName 事件名</span>
</p>
<p>
<span style="font-size:14px;"> * valueToSum 开启后系统会根据这个事件关联一个值,并按这个事件发生的全部情况求出总和,便于查 看平均值,当为0默认不开启</span>
</p>
<p>
<span style="font-size:14px;"> * parameters 附带参数,可以为该事件添加参数,参数key自定义如:@{@"order":orderid}</span>
</p>
<p>
<span style="font-size:14px;"> * tip:</span>
</p>
<p>
<span style="font-size:14px;"> fb的自定义事件</span>
</p>
<p>
<span style="font-size:14px;"> */</span>
</p>
<p>
<span style="font-size:14px;"> + (void)logEvent:(NSString *)eventName valueToSum:(double)valueToSum parameters:(NSDictionary<NSString *, id> *)parameters;</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;">4.4.AppsFlyer的使用 </span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">如果引入 appflyer报错,找不到头文件,请解压 SDK内附带 appsflyersdk压缩 包并替换 appsflyerSDK文件。Appsflyer已经内置安装、启动等事件统计,SDK 已内置注册、登录、购买事件统计。 </span>
</p>
<p>
<span style="font-size:14px;">引入 </span>
</p>
<p>
<span style="font-size:14px;">#import < JYouLoginKit/2REDeLoginKit.h></span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;">接口可参考头文件,使用类REDeLoginKit </span><br />
<span style="font-size:14px;">[REDeLoginKit setAppsFlyerDevKey:@"xxx" AppID:@"xxxx"useReceiptValidationSandbox:YES! ];</span><br />
<span style="font-size:14px;"> </span><br />
<p>
<span style="font-size:14px;">参数 devKey 在 AppsFlyer 后台,参数 appID 是该应用的 iTunes</span><span style="white-space:pre;"> </span><span style="font-size:14px;">ID 但不包含”id” 使用 AppsFlyer 需要加入系统框架</span><span style="white-space:pre;"> </span><span style="font-size:14px;">AdSupport.framework,iAd.framework,并设置 为 Optional。</span>
</p>
<p>
<span style="font-size:14px;"><img src="https://staticsite.quickapi.net/data/newFiles/20211025/20211025152456z5hr654.jpg" alt="" /> </span>
</p>
<span style="font-size:14px;"> </span><br />
<span style="font-size:14px;"> </span><br />