更新日期:2026年 01月 16日海外版iOS UE接入文档
<h3>
<span style="font-size:16px;line-height:2;">1. 概述</span>
</h3>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">1.1 ⽂档说明</span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">本⽂档介绍如何将 QuickGameSDK海外版集成到 Unreal Engine iOS 项⽬中。SDK 提供了初始化、登录、退出登</span><span style="font-size:14px;line-height:2;">录、⽀付和上传⻆⾊信息等功能</span>
</p>
<p>
<span style="font-size:14px;">接⼊时可参考 UE Demo,配合 iOS 原⽣接⼊⽂档: GameSDK/⽂档(Document)/iOS-SDK接⼊⽂档(核心篇).pdf(在下载的SDK资源获取此文档)</span>
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">1.2 SDK简介</span>
</h4>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">SDK 提供以下核心功能:</span><br />
<span style="font-size:14px;line-height:2;">⽤户登录:⽀持多种登录⽅式(邮箱、游客、Facebook、Google、Apple 等)</span><br />
<span style="font-size:14px;line-height:2;">⽀付系统:⽀持 App Store 内购</span><br />
<p>
<span style="font-size:14px;line-height:2;">数据分析:集成 Firebase、Adjust、AppsFlyer 等分析⼯具</span>
</p>
<p>
<span style="font-size:14px;">社交登录:⽀持 Facebook、Google 等第三方登录</span>
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">1.3 版本信息</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">SDK 版本: JYouLoginKit(v2.0.7.8)</span><br />
<span style="font-size:14px;line-height:2;">UE 版本: 5.7+</span><br />
<span style="font-size:14px;line-height:2;">⽀持平台: iOS 10.0+</span><br />
<span style="font-size:14px;line-height:2;">⽀持 Xcode: 16.0+</span><br />
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">2. 快速开始</span>
</h3>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">2.1 最⼩集成步骤</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 复制 SDK ⽂件到项⽬ GameSDK/SDK/ ⽬录</span><br />
<span style="font-size:14px;line-height:2;">2. 配置 Info.plist(见下⽅详细说明)</span><br />
<span style="font-size:14px;line-height:2;">3. 获取 Product Code(从 SDK 后台创建产品后获取)</span><br />
<span style="font-size:14px;line-height:2;">4. 调⽤初始化接⼝: UGameSDKManager::GetInstance()->InitializeSDK(ProductCode)</span><br />
<span style="font-size:14px;line-height:2;">5. 绑定回调并调⽤登录: SDKManager->Login()</span><br />
<p>
<span style="font-size:14px;line-height:2;">详细步骤请参考下⽅"集成步骤"章节</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">2.2 参考资源</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">SDK 原生接入文档目录: GameSDK/⽂档(Document)/</span><br />
<ul>
<li>
<span style="font-size:14px;line-height:2;">核⼼接⼊⽂档: iOS-SDK接⼊⽂档(核⼼篇).pdf</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Facebook 登录: iOS-SDK接⼊⽂档(Facebook登录篇).pdf</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Google 登录: iOS-SDK接⼊⽂档(Google登录篇).pdf</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Firebase 配置: iOS-SDK接⼊⽂档(Firebase数据篇).pdf</span>
</li>
</ul>
<span style="font-size:14px;">原生 </span><span style="font-size:14px;"><span style="font-size:14px;">Demo 项目:</span> GameSDK/Demo/</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">3. 架构说明</span>
</h3>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">3.1 分层架构设计</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">SDK 接⼝采⽤分层架构设计,接⼝调⽤层次如下:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">UE 代码层(蓝图/C++)<br />
↓<br />
UGameSDKManager (UE 封装层)<br />
- 类型转换: FString ↔ std::string<br />
- 委托系统: UE 委托 ↔ std::function<br />
- 线程安全: 确保回调在游戏线程执⾏<br />
↓<br />
QuickGameSDK::SDK (标准 C++ 接⼝层)<br />
- 纯 C++ 接⼝<br />
- 使⽤标准库类型(std::string, std::function)<br />
- 单例模式<br />
↓<br />
GameSDKBridge (C 接⼝层)<br />
- C ⻛格接⼝<br />
- 回调函数指针<br />
↓<br />
GameSDKBridge.mm (Objective-C++ 桥接层)<br />
- Objective-C 与 C++ 桥接<br />
- 协议回调处理<br />
- 主线程调⽤保证<br />
↓<br />
JYouLoginKit.framework (原⽣ iOS SDK)<br />
- Objective-C 实现<br />
- 协议回调模式<br />
<br />
</span>
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">3.2 各层功能说明</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">UGameSDKManager:UE 对象封装,提供蓝图⽀持,处理类型转换和线程切换</span><br />
<span style="font-size:14px;line-height:2;">QuickGameSDK::SDK:标准 C++ 接⼝,提供类型安全的接⼝封装</span><br />
<span style="font-size:14px;line-height:2;">GameSDKBridge:C 接⼝层,提供跨语⾔调⽤的桥梁</span><br />
<span style="font-size:14px;line-height:2;">GameSDKBridge.mm:Objective-C++ 实现,处理 SDK 协议回调和主线程调⽤</span><br />
<span style="font-size:14px;line-height:2;">JYouLoginKit:原⽣ SDK,提供实际的业务功能</span><br />
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">4. ⽂件结构</span>
</h3>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">4.1 SDK⽂件位置(GameSDK/SDK/)</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">SDK ⽂件应放置在项⽬根⽬录下的 GameSDK/SDK/ 目录:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">QuickGameIOS/</span><br />
<span style="font-size:14px;">└── GameSDK/</span><br />
<span style="font-size:14px;"> └── SDK/</span><br />
<span style="font-size:14px;"> ├── JYouLoginKit.framework # 主 SDK 框架(必需)</span><br />
<span style="font-size:14px;"> ├── SSBundle.bundle # SDK 资源包(必需)</span><br />
<span style="font-size:14px;"> ├── AdjustSdk.framework # Adjust SDK(数据分析)</span><br />
<span style="font-size:14px;"> ├── AdjustSigSdk.framework # Adjust 签名 SDK</span><br />
<span style="font-size:14px;"> ├── AppsFlyerLib.framework # AppsFlyer SDK(数据分析)</span><br />
<span style="font-size:14px;"> ├── FBAEMKit.framework # Facebook AEM Kit</span><br />
<span style="font-size:14px;"> ├── FBSDKCoreKit_Basics.framework # Facebook SDK 基础</span><br />
<span style="font-size:14px;"> ├── FBSDKCoreKit.framework # Facebook SDK 核⼼</span><br />
<span style="font-size:14px;"> ├── FBSDKLoginKit.framework # Facebook 登录 SDK</span><br />
<span style="font-size:14px;"> ├── FirebaseAnalytics/ # Firebase Analytics 框架⽬录</span><br />
<span style="font-size:14px;"> │ ├── FirebaseAnalytics.framework</span><br />
<span style="font-size:14px;"> │ ├── FirebaseCore.framework</span><br />
<span style="font-size:14px;"> │ ├── FirebaseMessaging.framework</span><br />
<span style="font-size:14px;"> │ └── ... (其他 Firebase 框架)</span><br />
<span style="font-size:14px;"> ├── FirebaseMessaging/ # Firebase Messaging 框架⽬录</span><br />
<span style="font-size:14px;"> │ └── FirebaseMessaging.framework</span><br />
<span style="font-size:14px;"> └── google/ # Google Sign-In SDK ⽬录</span><br />
<span style="font-size:14px;"> ├── GoogleSignIn.framework</span><br />
<span style="font-size:14px;"> ├── GoogleSignIn.bundle</span><br />
<span style="font-size:14px;"> ├── AppAuth.framework</span><br />
<span style="font-size:14px;"> └── ... (其他 Google 框架)</span>
</p>
<div>
<br />
</div>
<p>
<br />
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">4.2 源代码⽂件结构(Source/QuickGameIOS/IOS/)</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">Source/QuickGameIOS/IOS/<br />
├── QuickGameSDK.h # 标准 C++ 接⼝头⽂件<br />
├── QuickGameSDK.cpp # 标准 C++ 接⼝实现<br />
├── GameSDKBridge.h # C 接⼝头⽂件<br />
├── GameSDKBridge.mm # Objective-C++ 桥接实现<br />
├── GameSDKManager.h # UE C++ 接⼝类(暴露给蓝图)<br />
├── GameSDKManager.cpp # UE C++ 接⼝实现<br />
└── GameSDKAppDelegate.mm # AppDelegate URL回调处理<br />
<br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">4.3 主要框架和资源包说明</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">主 SDK:</span><br />
<ul>
<li>
<span style="font-size:14px;line-height:2;">JYouLoginKit.framework - 主 SDK 框架(静态框架)</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">SSBundle.bundle - SDK 资源包,包含 UI 资源、图⽚等</span>
</li>
</ul>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">第三方 SDK 框架:</span>
</p>
<ul>
<li>
<span style="font-size:14px;line-height:2;">Facebook SDK: FBSDKCoreKit.framework , FBSDKLoginKit.framework 等(动态框架)</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Google Sign-In: GoogleSignIn.framework , AppAuth.framework 等(静态框架)</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Firebase: FirebaseAnalytics.framework , FirebaseMessaging.framework 等(静态框架)</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Adjust: AdjustSdk.framework , AdjustSigSdk.framework (动态框架)</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">AppsFlyer: AppsFlyerLib.framework (静态框架)</span>
</li>
</ul>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">4.4 第三方SDK依赖</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">SDK 集成了以下第三方 SDK:</span><br />
<ul>
<li>
<span style="font-size:14px;line-height:2;">Adjust SDK:<span style="white-space:normal;font-size:14px;">用于</span>归因分析和数据追踪</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">AppsFlyer:<span style="white-space:normal;font-size:14px;">用于</span>移动归因和营销分析</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Facebook SDK:⽤于 Facebook 登录和数据追踪</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">Firebase:<span style="white-space:normal;font-size:14px;">用于</span>数据分析、推送通知等</span>
</li>
<li>
<span style="font-size:14px;">Google Sign-In:用于</span><span style="font-size:14px;"> Google 账号登录</span>
</li>
</ul>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">5. 集成步骤</span>
</h3>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">5.1 ⽂件准备</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.1.1 SDK文件复制</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 将 SDK 文件复制到项⽬根⽬录下的 GameSDK/SDK/ 目录</span><br />
<span style="font-size:14px;line-height:2;">2. 确保所有框架⽂件完整,特别是:</span><br />
<ul>
<li>
<span style="font-size:14px;line-height:2;">JYouLoginKit.framework</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">SSBundle.bundle</span>
</li>
<li>
<span style="font-size:14px;line-height:2;">所有第三⽅ SDK 框架</span>
</li>
</ul>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.1.2 目录结构检查</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">确认目录结构如下:</span>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;">QuickGameIOS/<br />
├── GameSDK/<br />
│ ├── SDK/ # SDK ⽂件⽬录<br />
│ │ ├── JYouLoginKit.framework<br />
│ │ ├── SSBundle.bundle<br />
│ │ └── ... (其他框架)<br />
│ ├── Demo/ # Demo 项⽬(参考)<br />
│ └── ⽂档(Document)/ # SDK ⽂档<br />
└── Source/<br />
└── QuickGameIOS/<br />
└── IOS/ # SDK 集成代码<br />
<br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">5.2 编译配置</span>
</h4>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;">5.2.1 Build.cs配置说明</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">SDK 框架和资源需要配置到 Source/QuickGameIOS/QuickGameIOS.Build.cs 中,可参考Demo</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><strong>关键配置点:</strong></span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">1. SDK 路径设置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">string SDKRoot = Path.GetFullPath(Path.Combine(ModuleDirectory,
"../../GameSDK/SDK"));</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">2. 主 SDK 框架</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;">JYouLoginKit.framework - 静态框架</span><br />
<span style="font-size:14px;">SSBundle.bundle - 资源包</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">3. 第三⽅框架分类</span>
</p>
<p>
<span style="font-size:14px;">动态框架(需要嵌⼊):Facebook SDK、Adjust SDK</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">静态框架(仅链接):Firebase、Google Sign-In、AppsFlyer</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">5.2.2 框架链接配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">在 QuickGameIOS.Build.cs 中,框架通过 PublicAdditionalFrameworks 添加:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">// 静态框架示例
PublicAdditionalFrameworks.Add(
new Framework(
"JYouLoginKit",
JYouLoginKitFrameworkPath,
""
)
);
// 动态框架示例(需要在 Xcode 中嵌⼊)
PublicAdditionalFrameworks.Add(
new Framework(
"FBSDKCoreKit",
FBSDKCoreKitFrameworkPath,
""
)
);</pre>
<br />
<p>
<br />
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;">5.2.3 资源包配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">资源包通过 AdditionalBundleResources 添加:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">AdditionalBundleResources.Add(
new BundleResource(SSBundlePath)
);</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;">5.2.4 系统框架依赖</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">需要添加的系统框架:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">PublicFrameworks.AddRange(new string[] {
"Foundation",
"UIKit",
"StoreKit",
"CoreTelephony",
"SystemConfiguration",
"Network",
"Security",
"UserNotifications", // Firebase 推送需要
"AdSupport", // Facebook SDK 需要
"AppTrackingTransparency", // Facebook SDK 需要
"AuthenticationServices", // Google登录需要
"SafariServices", // Google登录需要
// ... 其他框架
});</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.2.5 宏定义</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">确保定义了 WITH_GAMESDK 宏:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">PublicDefinitions.Add("WITH_GAMESDK=1");</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">5.3 Info.plist配置</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.3.1 ⽹络访问权限(NSAppTransportSecurity)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">SDK 需要访问⽹络接⼝,需要允许 HTTP 连接:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.3.2 URL Schemes⽩名单(LSApplicationQueriesSchemes)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">⽤于⽀持第三⽅登录,需要在⽩名单中声明:</span>
</p>
<pre class="brush:js;toolbar:false"><key>LSApplicationQueriesSchemes</key>
<array>
<!-- Facebook -->
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<!-- Google -->
<string>googlegmail</string>
<string>googlechrome</string>
<!-- ... 其他第三⽅登录 -->
</array></pre>
<p>
<br />
</p>
<span style="font-size:14px;line-height:2;"> </span><br />
<p>
<span style="font-size:14px;line-height:2;">5.3.3 第三⽅登录URL Schemes(CFBundleURLTypes)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">Facebook URL Scheme:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fbYOUR_FACEBOOK_APP_ID</string>
</array>
</dict>
</array></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">Google URL Scheme:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>
</array>
</dict></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.3.4 权限描述</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">相册权限:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册以保存和选择图⽚</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要访问相册以保存图⽚</string></pre>
<br />
<p>
<span style="font-size:14px;">相机权限:</span>
</p>
<p>
<span style="font-size:14px;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSCameraUsageDescription</key>
<string>上传头像等场景需要使⽤到您的相机</string></pre>
<br />
<p>
<span style="font-size:14px;">通知权限(Firebase 推送需要):</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSUserNotificationsUsageDescription</key>
<string>需要通知权限以接收推送消息</string></pre>
<br />
<p>
<span style="font-size:14px;">IDFA 追踪权限(App Tracking Transparency / Facebook SDK 需要):</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSUserTrackingUsageDescription</key>
<string>⽤于提供个性化⼴告体验和数据分析</string></pre>
<br />
<p>
<strong style="color:#E53333;font-size:14px;">重要说明:</strong>
</p>
<span style="font-size:14px;line-height:2;">此权限是 Facebook SDK 和⼴告追踪功能所必需的</span><br />
<span style="font-size:14px;line-height:2;">如果应⽤需要获取 IDFA(⼴告标识符),必须配置此权限描述</span><br />
<span style="font-size:14px;line-height:2;">描述⽂字必须清晰说明为什么需要追踪权限,Apple 审核会检查</span><br />
<p>
<span style="font-size:14px;line-height:2;">建议描述⽂字要符合应⽤的实际⽤途,避免审核被拒</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.3.5 Facebook配置项</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>FacebookAppID</key>
<string>YOUR_FACEBOOK_APP_ID</string>
<key>FacebookClientToken</key>
<string>YOUR_FACEBOOK_CLIENT_TOKEN</string>
<key>FacebookDisplayName</key>
<string>您的应⽤名称</string></pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">5.3.6 Google配置项</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>GIDClientID</key>
<string>YOUR_GOOGLE_CLIENT_ID.apps.googleusercontent.com</string></pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">5.4 Xcode配置</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">5.4.1 动态框架嵌⼊</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;"><span style="color:#E53333;"><strong>重要:</strong></span>以下动态框架需要在 Xcode 中⼿动添加到 "Embed Frameworks" 阶段:</span><br />
<span style="font-size:14px;line-height:2;">FBSDKCoreKit.framework</span><br />
<span style="font-size:14px;line-height:2;">FBAEMKit.framework</span><br />
<span style="font-size:14px;line-height:2;">FBSDKCoreKit_Basics.framework</span><br />
<span style="font-size:14px;line-height:2;">FBSDKLoginKit.framework</span><br />
<span style="font-size:14px;line-height:2;">AdjustSdk.framework</span><br />
<span style="font-size:14px;line-height:2;">AdjustSigSdk.framework</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">配置步骤:</span>
</p>
<span style="font-size:14px;line-height:2;">1. 打开 Xcode 项目: QuickGameIOS (IOS).xcworkspace</span><br />
<span style="font-size:14px;line-height:2;">2. 选择 Target: QuickGameIOS</span><br />
<span style="font-size:14px;line-height:2;">3. 进⼊ "Build Phases" 标签</span><br />
<span style="font-size:14px;line-height:2;">4. 展开 "Embed Frameworks"</span><br />
<span style="font-size:14px;line-height:2;">5. 点击 "+" 添加上述动态框架</span><br />
<span style="font-size:14px;line-height:2;">6. 确保 "Code Sign On Copy" 已勾选</span><br />
<p>
<span style="font-size:14px;line-height:2;">如下图:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><img src="https://staticsite.quickapi.net/data/newFiles/20260108/202601081427534djG656.png" alt="" /><br />
</span>
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;">5.4.2 静态框架链接</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">静态框架(如 JYouLoginKit、Firebase、Google Sign-In)会⾃动链接,⽆需⼿动嵌⼊</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">5.4.3 资源⽂件检查</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">确认以下资源⽂件已正确添加到项目中:</span><br />
<span style="font-size:14px;line-height:2;">SSBundle.bundle - SDK 资源包</span><br />
<p>
<span style="font-size:14px;line-height:2;">GoogleSignIn.bundle - Google Sign-In 资源</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">5.4.4 GoogleService-Info.plist配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">如果使⽤了 Firebase 或 Google 登录,需要:</span><br />
<span style="font-size:14px;line-height:2;">1. 从 Firebase 控制台下载 GoogleService-Info.plist</span><br />
<span style="font-size:14px;line-height:2;">2. 将⽂件复制到 Source/ <span style="white-space:normal;font-size:14px;">目录</span>或 GameSDK/Demo/目录</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 在 Build.cs 中配置路径:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">string GoogleServiceInfoPath = Path.Combine(Path.GetFullPath(Path.Combine(ModuleDirectory,
"../../GameSDK/Demo")), "GoogleService-Info.plist");
if (File.Exists(GoogleServiceInfoPath))
{
AdditionalBundleResources.Add(
new BundleResource(GoogleServiceInfoPath)
);
}</pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;">6. 接⼝调⽤</span>
</h3>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">6.1 在蓝图中使⽤</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">6.1.1 初始化SDK</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 获取 GameSDKManager 实例:</span><br />
<p>
<span style="font-size:14px;line-height:2;">在蓝图中调⽤ Get Instance 节点(类型:GameSDKManager)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">2. 初始化 SDK:</span><br />
<span style="font-size:14px;line-height:2;">调⽤ Initialize SDK 节点</span><br />
<p>
<span style="font-size:14px;line-height:2;">输⼊参数: Product Code (产品Code,从 GameSDK 后台获取)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">3. 绑定初始化回调:</span><br />
<span style="font-size:14px;line-height:2;">绑定 On Init Complete 委托</span><br />
<span style="font-size:14px;line-height:2;">检查返回的 Status :</span><br />
<span style="font-size:14px;line-height:2;">InitSuccess (2000) - 初始化成功</span><br />
<p>
<span style="font-size:14px;line-height:2;">InitFail (2001) - 初始化失败</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">示例流程:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">Event BeginPlay
→ Get Instance (GameSDKManager)
→ Bind Event to On Init Complete
→ Initialize SDK (Product Code: "your_product_code")</pre>
<p>
<br />
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;">6.1.2 登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 调⽤登录</span><br />
<span style="font-size:14px;line-height:2;">调⽤ Login 节点</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">2. 绑定登录回调</span>
</p>
<span style="font-size:14px;line-height:2;">绑定 On Login Complete 委托</span><br />
<span style="font-size:14px;line-height:2;">回调参数:</span><br />
<span style="font-size:14px;line-height:2;">Status - 登录状态码(1000 表示成功)</span><br />
<span style="font-size:14px;line-height:2;">UserId - ⽤户ID</span><br />
<span style="font-size:14px;line-height:2;">Token - ⽤户Token(⽤于服务器验证)</span><br />
<span style="font-size:14px;line-height:2;">Message - 消息</span><br />
<p>
<span style="font-size:14px;line-height:2;color:#E53333;"><strong>注意:登录会弹出 SDK 的登录界⾯,⽤户可以选择不同的登录⽅式</strong></span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">6.1.3 退出登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">调⽤退出登录</span><br />
<span style="font-size:14px;line-height:2;">调用 Logout 节点</span><br />
<span style="font-size:14px;line-height:2;">退出登录后,SDK 会隐藏悬浮球并清除登录状态</span><br />
<p>
<span style="font-size:14px;line-height:2;color:#E53333;"><strong>注意:退出登录后,⽤户需要重新登录才能使⽤需要登录的功能</strong></span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">6.1.4 ⽀付</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 调⽤⽀付:</span><br />
<span style="font-size:14px;line-height:2;">调⽤ Pay 节点</span><br />
<span style="font-size:14px;line-height:2;">输⼊参数:</span><br />
<span style="font-size:14px;line-height:2;">Product Id - 商品ID(必填,App Store 商品ID)</span><br />
<span style="font-size:14px;line-height:2;">Product Name - 商品名称(必填)</span><br />
<span style="font-size:14px;line-height:2;">Product Desc - 商品描述(可选)</span><br />
<span style="font-size:14px;line-height:2;">Price - 价格(必填,单位:元,如 6.00)</span><br />
<span style="font-size:14px;line-height:2;">Order No - 游戏订单号(必填,必须唯⼀)</span><br />
<span style="font-size:14px;line-height:2;">Url - 回调通知地址(可选,服务器回调URL)</span><br />
<p>
<span style="font-size:14px;line-height:2;">Extras - 透传参数(可选,JSON 字符串)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">2. 绑定⽀付回调</span><br />
<span style="font-size:14px;line-height:2;">绑定 On Pay Complete 委托</span><br />
<span style="font-size:14px;line-height:2;">回调参数:</span><br />
<span style="font-size:14px;line-height:2;">Status - ⽀付状态码:</span><br />
<span style="font-size:14px;line-height:2;">OrderSuccess (3000) - ⽀付成功</span><br />
<span style="font-size:14px;line-height:2;">OrderFail (3001) - ⽀付失败</span><br />
<span style="font-size:14px;line-height:2;">OrderCancel (3002) - ⽀付取消</span><br />
<span style="font-size:14px;line-height:2;">OrderUnknown (3003) - ⽀付未知状态</span><br />
<span style="font-size:14px;line-height:2;">Order No - 订单号</span><br />
<span style="font-size:14px;line-height:2;">Product Id - 商品ID</span><br />
<span style="font-size:14px;line-height:2;">Transaction Id - 交易ID</span><br />
<p>
<span style="font-size:14px;line-height:2;">Message - 消息</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">6.1.5 上传⻆⾊信息</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 调⽤上传⻆⾊</span><br />
<p>
<span style="font-size:14px;line-height:2;">调⽤ Update Role Info 节点</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">2. 必填参数</span>
</p>
<span style="font-size:14px;line-height:2;">Role Id - ⻆⾊ID</span><br />
<span style="font-size:14px;line-height:2;">Role Name - ⻆⾊名称</span><br />
<span style="font-size:14px;line-height:2;">Server Id - 区服ID</span><br />
<span style="font-size:14px;line-height:2;">Server Name - 区服名称</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">3. 可选参数</span>
</p>
<span style="font-size:14px;line-height:2;">Role Level - ⻆⾊等级</span><br />
<span style="font-size:14px;line-height:2;">Vip Level - VIP等级</span><br />
<span style="font-size:14px;line-height:2;">Role Power - ⻆⾊战力</span><br />
<span style="font-size:14px;line-height:2;">Game Role Balance - ⻆⾊余额</span><br />
<p>
<span style="font-size:14px;line-height:2;">Party Name - 工会名称</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">6.1.6 获取用户信息</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">Get User Id - 获取⽤户ID(返回 FString)</span><br />
<span style="font-size:14px;line-height:2;">Get User Token - 获取⽤户Token(返回 FString)</span><br />
<span style="font-size:14px;line-height:2;">Is Logined - 是否已登录(返回 bool)</span><br />
<p>
<span style="font-size:14px;line-height:2;">Is Guest - 是否为游客(返回 bool)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">6.1.7 回调处理</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">所有回调都在游戏线程(Game Thread)执⾏,可以直接更新 UI</span><br />
<p>
<span style="font-size:14px;line-height:2;">回调绑定示例:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">Event BeginPlay
→ Get Instance (GameSDKManager)
→ Bind Event to On Init Complete
→ Bind Event to On Login Complete
→ Bind Event to On Pay Complete</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">6.2 在C++中使⽤</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">6.2.1 使⽤UGameSDKManager(<span style="color:#E53333;">推荐</span>)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">这是推荐的⽅式,⽀持蓝图,使⽤简单:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">#include "IOS/GameSDKManager.h"
// 获取实例
UGameSDKManager* SDKManager = UGameSDKManager::GetInstance();
// 初始化
SDKManager->InitializeSDK(TEXT("YOUR_PRODUCT_CODE"));
// 绑定回调
SDKManager->OnInitComplete.AddDynamic(this, &AMyGameMode::HandleInitComplete);
SDKManager->OnLoginComplete.AddDynamic(this, &AMyGameMode::HandleLoginComplete);
SDKManager->OnPayComplete.AddDynamic(this, &AMyGameMode::HandlePayComplete);
// 登录
SDKManager->Login();
// 退出登录
SDKManager->Logout();
// ⽀付
SDKManager->Pay(
TEXT("product_id"),
TEXT("商品名称"),
TEXT("商品描述"),
6.00f, // 价格
TEXT("order_12345"),
TEXT(""), // ⽀付回调地址URL
TEXT("") // Extras
);
// 上传⻆⾊
SDKManager->UpdateRoleInfo(
TEXT("role_123"),
TEXT("⻆⾊名"),
TEXT("server_1"),
TEXT("服务器1"),
TEXT("10"), // Level
TEXT("1"), // VIP
TEXT(""), // Power
TEXT(""), // Balance
TEXT("") // Party
);
// 获取⽤户信息
FString UserId = SDKManager->GetUserId();
FString Token = SDKManager->GetUserToken();
bool bIsLogined = SDKManager->IsLogined();
bool bIsGuest = SDKManager->IsGuest();</pre>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;">回调函数示例:</span>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">void AMyGameMode::HandleInitComplete(EGameSDKStatus Status)
{
if (Status == EGameSDKStatus::InitSuccess)
{
UE_LOG(LogTemp, Log, TEXT("SDK initialized successfully"));
// 初始化成功,可以调⽤登录
SDKManager->Login();
}
else
{
UE_LOG(LogTemp, Error, TEXT("SDK initialization failed"));
}
}
void AMyGameMode::HandleLoginComplete(EGameSDKStatus Status, const FString& UserId, const
FString& Token, const FString& Message)
{
if (Status == EGameSDKStatus::ErrorNone)
{
UE_LOG(LogTemp, Log, TEXT("Login success: UserId=%s"), *UserId);
// 登录成功,保存⽤户信息
}
}
void AMyGameMode::HandlePayComplete(EGameSDKStatus Status, const FString& OrderNo, const
FString& ProductId, const FString& TransactionId, const FString& Message)
{
if (Status == EGameSDKStatus::OrderSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Pay success: OrderNo=%s, ProductId=%s"), *OrderNo,
*ProductId);
// ⽀付成功
}
}</pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"></span><span style="font-size:14px;">6.2.2 使⽤QuickGameSDK::SDK标准接⼝</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">如果需要使⽤标准 C++ 接⼝(不依赖 UE 对象系统)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">#include "IOS/QuickGameSDK.h"
using namespace QuickGameSDK;
// 获取实例
SDK& sdk = SDK::GetInstance();
// 初始化(使⽤ lambda 回调)
sdk.Initialize("YOUR_PRODUCT_CODE", [](Status status) {
if (status == Status::InitSuccess) {
// 初始化成功
UE_LOG(LogTemp, Log, TEXT("SDK initialized"));
}
});
// 登录
sdk.Login([](Status status, const std::string& userId, const std::string& token, const
std::string& message) {
if (status == Status::Success) {
// 登录成功
FString UserIdStr = UTF8_TO_TCHAR(userId.c_str());
UE_LOG(LogTemp, Log, TEXT("Login success: %s"), *UserIdStr);
}
});
// ⽀付
sdk.Pay(
"product_id",
"商品名称",
"商品描述",
6.00f,
"order_12345",
"", // ⽀付回调地址URL
"", // Extras
[](Status status, const std::string& orderNo, const std::string& productId,
const std::string& transactionId, const std::string& message) {
if (status == Status::OrderSuccess) {
// ⽀付成功
}
}
);
// 上传⻆⾊
sdk.UpdateRoleInfo(
"role_123",
"⻆⾊名",
"server_id",
"服务器名",
"10", // ⻆⾊等级
"1", // VIP等级
"", // Power
"", // Balance
"" // Party
);</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<br />
</p>
<h3>
<span style="font-size:16px;line-height:2;">7. API参考</span>
</h3>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">7.1 UGameSDKManager类</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.1 静态⽅法</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">static UGameSDKManager* GetInstance()</span><br />
<p>
<span style="font-size:14px;">获取单例实例</span>
</p>
<span style="font-size:14px;line-height:2;">返回值: UGameSDKManager* - SDK Manager 实例</span><br />
<p>
<span style="font-size:14px;line-height:2;">说明:⾸次调⽤会创建实例,后续调⽤返回同⼀实例</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.2 初始化与登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void InitializeSDK(const FString& ProductCode)</span><br />
<p>
<span style="font-size:14px;">初始化 SDK</span>
</p>
<span style="font-size:14px;line-height:2;">参数:</span><br />
<span style="font-size:14px;line-height:2;">ProductCode - 产品Code,从 GameSDK 后台获取</span><br />
<p>
<span style="font-size:14px;line-height:2;">回调: OnInitComplete 委托</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void Login()</span><br />
<span style="font-size:14px;line-height:2;">调⽤登录,会弹出 SDK 登录界⾯</span><br />
<p>
<span style="font-size:14px;line-height:2;">回调: OnLoginComplete 委托</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void Logout()</span><br />
<p>
<span style="font-size:14px;line-height:2;">退出登录,清除登录状态</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.3 ⽀付接口</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void Pay(const FString& ProductId, const FString& ProductName, const FString& ProductDesc,</span><span style="font-size:14px;line-height:2;">float Price, const FString& OrderNo, const FString& Url, const FString& Extras)</span><br />
<span style="font-size:14px;line-height:2;">发起⽀付</span><br />
<span style="font-size:14px;line-height:2;">参数:</span><br />
<span style="font-size:14px;line-height:2;">ProductId - 商品ID(必填,App Store 商品ID)</span><br />
<span style="font-size:14px;line-height:2;">ProductName - 商品名称(必填)</span><br />
<span style="font-size:14px;line-height:2;">ProductDesc - 商品描述(可选)</span><br />
<span style="font-size:14px;line-height:2;">Price - 价格(必填,单位:元)</span><br />
<span style="font-size:14px;line-height:2;">OrderNo - 游戏订单号(必填,必须唯⼀)</span><br />
<span style="font-size:14px;line-height:2;">Url - 回调通知地址(可选)</span><br />
<span style="font-size:14px;line-height:2;">Extras - 透传参数(可选)</span><br />
<p>
<span style="font-size:14px;line-height:2;">回调: OnPayComplete 委托</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.4 角色信息接口</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void UpdateRoleInfo(const FString& RoleId, const FString& RoleName, const FString& ServerId,</span><span style="font-size:14px;line-height:2;">const FString& ServerName, const FString& RoleLevel = TEXT(""), const FString& VipLevel =</span><span style="font-size:14px;line-height:2;">TEXT(""), const FString& RolePower = TEXT(""), const FString& GameRoleBalance = TEXT(""),</span><span style="font-size:14px;line-height:2;">const FString& PartyName = TEXT(""), const FString& RoleActive = TEXT(""), const FString&</span><span style="font-size:14px;line-height:2;">RoleOnline = TEXT(""), const FString& RoleTask = TEXT(""))</span><br />
<span style="font-size:14px;line-height:2;">上传角色信息</span><br />
<span style="font-size:14px;line-height:2;">必填参数:</span><br />
<span style="font-size:14px;line-height:2;">RoleId - ⻆⾊ID</span><br />
<span style="font-size:14px;line-height:2;">RoleName - ⻆⾊名称</span><br />
<span style="font-size:14px;line-height:2;">ServerId - 区服ID</span><br />
<span style="font-size:14px;line-height:2;">ServerName - 区服名称</span><br />
<span style="font-size:14px;line-height:2;">可选参数:</span><br />
<span style="font-size:14px;line-height:2;">RoleLevel - ⻆⾊等级</span><br />
<span style="font-size:14px;line-height:2;">VipLevel - VIP等级</span><br />
<span style="font-size:14px;line-height:2;">RolePower - ⻆⾊战力</span><br />
<span style="font-size:14px;line-height:2;">GameRoleBalance - ⻆⾊余额</span><br />
<p>
<span style="font-size:14px;line-height:2;">PartyName - ⼯会名称</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.5 ⽤户信息查询</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">FString GetUserId()</span><br />
<span style="font-size:14px;line-height:2;">获取⽤户 ID</span><br />
<p>
<span style="font-size:14px;line-height:2;">返回值:⽤户ID字符串,未登录时返回空字符串</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">FString GetUserToken()</span><br />
<span style="font-size:14px;line-height:2;">获取⽤户 Token</span><br />
<p>
<span style="font-size:14px;line-height:2;">返回值:⽤户Token字符串,⽤于服务器验证</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">bool IsLogined()</span><br />
<span style="font-size:14px;line-height:2;">是否已登录</span><br />
<p>
<span style="font-size:14px;line-height:2;">返回值: true 表示已登录, false 表示未登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">bool IsGuest()</span><br />
<span style="font-size:14px;line-height:2;">是否为游客账号</span><br />
<p>
<span style="font-size:14px;line-height:2;">返回值: true 表示是游客, false 表示已绑定账号</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.1.6 回调委托</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">FOnInitComplete OnInitComplete</span><br />
<span style="font-size:14px;line-height:2;">初始化完成回调</span><br />
<span style="font-size:14px;line-height:2;">参数: EGameSDKStatus Status - 初始化状态</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">FOnLoginComplete OnLoginComplete</span>
</p>
<span style="font-size:14px;line-height:2;">登录完成回调</span><br />
<span style="font-size:14px;line-height:2;">参数:</span><br />
<span style="font-size:14px;line-height:2;">EGameSDKStatus Status - 登录状态</span><br />
<span style="font-size:14px;line-height:2;">const FString& UserId - ⽤户ID</span><br />
<span style="font-size:14px;line-height:2;">const FString& Token - ⽤户Token</span><br />
<p>
<span style="font-size:14px;line-height:2;">const FString& Message - 消息</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">FOnPayComplete OnPayComplete</span><br />
<span style="font-size:14px;line-height:2;">⽀付完成回调</span><br />
<span style="font-size:14px;line-height:2;">参数:</span><br />
<span style="font-size:14px;line-height:2;">EGameSDKStatus Status - ⽀付状态</span><br />
<span style="font-size:14px;line-height:2;">const FString& OrderNo - 订单号</span><br />
<span style="font-size:14px;line-height:2;">const FString& ProductId - 商品ID</span><br />
<span style="font-size:14px;line-height:2;">const FString& TransactionId - 交易ID</span><br />
<span style="font-size:14px;line-height:2;">const FString& Message - 消息</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">7.2 QuickGameSDK::SDK类</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.2.1 标准C++接⼝</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">static SDK& GetInstance()</span><br />
<p>
<span style="font-size:14px;line-height:2;">获取单例实例</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void Initialize(const std::string& productCode, InitCallback callback = nullptr)</span><br />
<p>
<span style="font-size:14px;">初始化 SDK</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">void Login(LoginCallback callback = nullptr)</span>
</p>
<span style="font-size:14px;line-height:2;">调⽤登录</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">void Logout()</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">退出登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void Pay(const std::string& productId, const std::string& productName, const std::string&</span><span style="font-size:14px;line-height:2;">productDesc, float price, const std::string& orderNo, const std::string& url = "", const</span><span style="font-size:14px;line-height:2;">std::string& extras = "", PayCallback callback = nullptr)</span><br />
<p>
<span style="font-size:14px;line-height:2;">发起⽀付</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">void UpdateRoleInfo(...)</span><br />
<span style="font-size:14px;line-height:2;">上传⻆⾊信息</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">std::string GetUserId()</span>
</p>
<span style="font-size:14px;line-height:2;">获取⽤户ID</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">std::string GetUserToken()</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">获取⽤户Token</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">bool IsLogined()</span><br />
<p>
<span style="font-size:14px;line-height:2;">是否已登录</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">bool IsGuest()</span><br />
<span style="font-size:14px;line-height:2;">是否为游客</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.2.2 回调函数类型</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">using InitCallback = std::function<void(Status status)>;</span><br />
<p>
<span style="font-size:14px;line-height:2;">初始化回调</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">using LoginCallback = std::function<void(Status status, const std::string& userId, const</span><span style="font-size:14px;line-height:2;">std::string& token, const std::string& message)>;</span><br />
<p>
<span style="font-size:14px;line-height:2;">登录回调</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">using PayCallback = std::function<void(Status status, const std::string& orderNo, const</span><span style="font-size:14px;line-height:2;">std::string& productId, const std::string& transactionId, const std::string& message)>;</span><br />
<p>
<span style="font-size:14px;line-height:2;">⽀付回调</span>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">7.3 状态码说明</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.3.1 状态码枚举</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">enum class EGameSDKStatus : uint8
{
Unknown = 0, // 未知状态
ErrorNone = 1000, // 事件成功(登录成功)
InitSuccess = 2000, // 初始化成功
InitFail = 2001, // 初始化失败
OrderSuccess = 3000, // ⽀付成功
OrderFail = 3001, // ⽀付失败
OrderCancel = 3002, // ⽀付取消
OrderUnknown = 3003 // ⽀付未知状态
};</pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">7.3.2 状态码含义</span>
</p>
<span style="font-size:14px;line-height:2;">ErrorNone (1000) :事件成功,通常⽤于登录成功</span><br />
<span style="font-size:14px;line-height:2;">InitSuccess (2000) :SDK 初始化成功</span><br />
<span style="font-size:14px;line-height:2;">InitFail (2001) :SDK 初始化失败,检查 ProductCode 是否正确</span><br />
<span style="font-size:14px;line-height:2;">OrderSuccess (3000) :⽀付成功,需要服务器验证订单</span><br />
<span style="font-size:14px;line-height:2;">OrderFail (3001) :⽀付失败,可能是⽹络问题或参数错误</span><br />
<span style="font-size:14px;line-height:2;">OrderCancel (3002) :⽤户取消⽀付</span><br />
<p>
<span style="font-size:14px;line-height:2;">OrderUnknown (3003) :⽀付状态未知,需要查询订单状态</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">7.3.3 错误处理</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">初始化失败处理:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false">if (Status == EGameSDKStatus::InitFail)
{
// 检查 ProductCode 是否正确
// 检查⽹络连接
// 检查 SDK ⽂件是否完整
}</pre>
<br />
<p>
<span style="font-size:14px;">⽀付失败处理:</span>
</p>
<p>
<span style="font-size:14px;"> </span>
</p>
<pre class="brush:js;toolbar:false">if (Status == EGameSDKStatus::OrderFail)
{
// 检查⽹络连接
// 检查商品ID是否正确
// 检查订单号是否唯⼀
}</pre>
<p>
<br />
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h3>
<span style="font-size:16px;line-height:2;">8. 第三⽅登录配置</span>
</h3>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">8.1 Facebook登录</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">8.1.1 App ID配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 访问 <a href="https://developers.facebook.com/" target="_blank">Facebook for Developers</a></span><br />
<span style="font-size:14px;line-height:2;">2. 创建应⽤并获取 App ID</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 在 Info.plist 中配置:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>FacebookAppID</key>
<string>YOUR_FACEBOOK_APP_ID</string>
<key>FacebookClientToken</key>
<string>YOUR_FACEBOOK_CLIENT_TOKEN</string>
<key>FacebookDisplayName</key>
<string>您的应⽤名称</string></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">8.1.2 URL Scheme配置</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">在 CFBundleURLTypes 中添加:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fbYOUR_FACEBOOK_APP_ID</string>
</array>
</dict></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">8.1.3 Info.plist配置项</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">确保在 LSApplicationQueriesSchemes 中包含:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string></pre>
<br />
<p>
<br />
</p>
<h4>
<span style="font-size:14px;">8.2 Google登录</span>
</h4>
<br />
<p>
<span style="font-size:14px;line-height:2;">8.2.1 Client ID配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 访问<a href="https://console.cloud.google.com/" target="_blank"> Google Cloud Console</a></span><br />
<span style="font-size:14px;line-height:2;">2. 创建 OAuth 2.0 客户端 ID</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 在 Info.plist 中配置:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>GIDClientID</key>
<string>YOUR_CLIENT_ID.apps.googleusercontent.com</string></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">8.2.2 URL Scheme配置</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">在 CFBundleURLTypes 中添加:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>
</array>
</dict></pre>
<br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;">8.2.3 GoogleService-Info.plist配置</span>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">如果使⽤ Firebase,需要:</span><br />
<span style="font-size:14px;line-height:2;">1. 从 Firebase 控制台下载 GoogleService-Info.plist</span><br />
<span style="font-size:14px;line-height:2;">2. 将⽂件复制到 Source/ 或 GameSDK/Demo/ ⽬录</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 在 Build.cs 中配置路径(⻅ 5.4.4 节)</span>
</p>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">8.3 Apple登录</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">8.3.1 配置要求</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 在 Apple Developer 后台启⽤ Sign in with Apple 功能</span><br />
<span style="font-size:14px;line-height:2;">2. 在 Xcode 中启⽤ Capability:Sign in with Apple</span><br />
<span style="font-size:14px;line-height:2;">3. 确保 Bundle ID 已勾选配置 Sign in with Apple</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">8.3.2 权限说明</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">Apple 登录不需要额外的 Info.plist 配置,但需要:</span>
</p>
<span style="font-size:14px;line-height:2;">在 Xcode 中启⽤ Capability</span><br />
<span style="font-size:14px;line-height:2;">确保应⽤已正确签名</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">8.4 其他登录⽅式</span>
</h4>
<span style="font-size:14px;line-height:2;">SDK 可能还⽀持其他登录⽅式(如Naver、Line 等),具体配置请参考:</span><br />
<span style="font-size:14px;line-height:2;">SDK ⽂档: GameSDK/⽂档(Document)/iOS-SDK接⼊⽂档(核⼼篇).pdf</span><br />
<span style="font-size:14px;line-height:2;">Demo 项目: GameSDK/Demo/</span>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">9. 第三⽅SDK集成说明</span>
</h3>
<p>
<br />
</p>
<p>
<br />
</p>
<h4>
<span style="font-size:14px;line-height:2;">9.1 Firebase</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.1.1 Analytics配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">Firebase Analytics ⽤于数据分析,需要:</span><br />
<span style="font-size:14px;line-height:2;">1. 在 Firebase 控制台创建项目</span><br />
<span style="font-size:14px;line-height:2;">2. 下载 GoogleService-Info.plist</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 配置到项⽬中(⻅ 5.4.4 节)</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.1.2 Firebase推送配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">Firebase Messaging ⽤于推送通知,需要:</span><br />
<span style="font-size:14px;line-height:2;">1. 在 Firebase 控制台配置 APNs 证书</span><br />
<p>
<span style="font-size:14px;line-height:2;">2. 在 Info.plist 中添加通知权限:</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"> </span>
</p>
<pre class="brush:js;toolbar:false"><key>NSUserNotificationsUsageDescription</key>
<string>需要通知权限以接收推送消息</string></pre>
<p>
<span style="font-size:14px;">3. 在 Xcode 中启⽤ Push Notifications Capability</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.1.3 GoogleService-Info.plist</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">这是 Firebase 和 Google Sign-In 的配置⽂件,必须正确配置才能使⽤相关功能</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">9.2 Adjust</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.2.1 配置说明</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">Adjust SDK ⽤于归因分析和数据追踪</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">集成要求:</span><br />
<span style="font-size:14px;line-height:2;">1. 框架已包含在 SDK 中: AdjustSdk.framework 、 AdjustSigSdk.framework</span><br />
<span style="font-size:14px;line-height:2;">2. 需要在 Xcode 中嵌⼊(动态框架)</span><br />
<span style="font-size:14px;line-height:2;">3. 在 Adjust 后台配置应⽤信息</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">配置步骤:</span>
</p>
<span style="font-size:14px;line-height:2;">1. 在 Adjust 后台创建应⽤</span><br />
<span style="font-size:14px;line-height:2;">2. 获取 App Token</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 在 SDK 初始化时调⽤Adjust初始化接⼝</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<br />
<p>
<span style="font-size:14px;line-height:2;">9.2.2 集成要求</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">确保 AdjustSdk.framework 和 AdjustSigSdk.framework 已嵌⼊到应⽤中</span><br />
<span style="font-size:14px;line-height:2;">确保调⽤了Adjust初始化接⼝,可放到SDK初始化接⼝的地⽅⼀起</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">9.3 AppsFlyer</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.3.1 配置说明</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">AppsFlyer SDK ⽤于移动归因和营销分析</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">集成要求:</span><br />
<span style="font-size:14px;line-height:2;">1. 框架已包含: AppsFlyerLib.framework (静态框架)</span><br />
<span style="font-size:14px;line-height:2;">2. 在 AppsFlyer 后台配置应⽤信息,获取 Dev Key</span><br />
<p>
<span style="font-size:14px;line-height:2;">3. 确保调⽤了SDK提供的AppsFlyer初始化接⼝,可放到SDK初始化接⼝的地⽅⼀起</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">9.3.2 集成要求</span><br />
<span style="font-size:14px;line-height:2;">确保 AppsFlyerLib.framework 已正确链接</span><br />
<span style="font-size:14px;line-height:2;">检查网络权限配置</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">9.4 Facebook SDK</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.4.1 配置说明</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">Facebook SDK ⽤于 Facebook 登录和数据追踪</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">已包含的框架:</span><br />
<span style="font-size:14px;line-height:2;">FBSDKCoreKit.framework - 核⼼功能</span><br />
<span style="font-size:14px;line-height:2;">FBSDKLoginKit.framework - 登录功能</span><br />
<span style="font-size:14px;line-height:2;">FBAEMKit.framework - AEM 功能</span><br />
<span style="font-size:14px;line-height:2;">FBSDKCoreKit_Basics.framework - 基础功能</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">配置要求:</span>
</p>
<span style="font-size:14px;line-height:2;">1. 在 Facebook for Developers 创建应⽤</span><br />
<span style="font-size:14px;line-height:2;">2. 配置 App ID 和 Client Token(见 8.1 节)</span><br />
<span style="font-size:14px;line-height:2;">3. 确保动态框架已嵌⼊(见 5.4.1 节)</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">9.4.2 数据追踪配置</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">如果需要使⽤ Facebook 数据追踪功能</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">1. 在 Facebook 后台启⽤相应功能</span><br />
<span style="font-size:14px;line-height:2;">2. 配置事件追踪(通常由 GameSDK 内部处理)</span><br />
<span style="font-size:14px;line-height:2;">3. <span style="color:#E53333;"><strong>必须配置 IDFA 权限</strong></span>(见5.3.4 节):</span><br />
<span style="font-size:14px;line-height:2;">在 Info.plist 中添加 NSUserTrackingUsageDescription</span><br />
<span style="font-size:14px;line-height:2;">描述⽂字必须清晰说明为什么需要追踪权限</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><span style="color:#E53333;"><strong>重要</strong></span>:从 iOS 14.5 开始,应⽤必须获得⽤户同意才能访问 IDFA。如果没有配置</span><span style="font-size:14px;">NSUserTrackingUsageDescription ,数据 SDK 将⽆法获取 IDFA,可能导致数据追踪功能异常</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h3>
<span style="font-size:16px;line-height:2;">10. 常见问题</span>
</h3>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">10.1 编译问题</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.1.1 框架找不到</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">问题:编译时提示找不到框架⽂件</span><br />
<span style="font-size:14px;line-height:2;">解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查 SDK ⽂件路径是否正确: GameSDK/SDK/</span><br />
<span style="font-size:14px;line-height:2;">2. 检查 Build.cs 中的路径配置</span><br />
<span style="font-size:14px;line-height:2;">3. 确认框架⽂件完整,没有被损坏</span><br />
<span style="font-size:14px;line-height:2;">4. 清理并重新⽣成 Xcode 项⽬</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.1.2 链接错误</span>
</p>
<span style="font-size:14px;line-height:2;">问题:链接时出现符号未定义错误。</span><br />
<span style="font-size:14px;line-height:2;">解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查所有必需的框架是否都已添加到 Build.cs</span><br />
<span style="font-size:14px;line-height:2;">2. 检查系统框架依赖是否完整</span><br />
<span style="font-size:14px;line-height:2;">3. 确认动态框架已在 Xcode 中嵌⼊(⻅ 5.4.1 节)</span><br />
<span style="font-size:14px;line-height:2;">4. 检查框架的架构是否匹配(arm64)</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.1.3 资源⽂件缺失</span>
</p>
<span style="font-size:14px;line-height:2;">问题:运⾏时找不到资源⽂件</span><br />
<span style="font-size:14px;line-height:2;">解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查 SSBundle.bundle 是否已添加到 AdditionalBundleResources</span><br />
<span style="font-size:14px;line-height:2;">2. 检查 GoogleSignIn.bundle 是否已配置</span><br />
<span style="font-size:14px;line-height:2;">3. 确认资源⽂件路径正确</span><br />
<span style="font-size:14px;line-height:2;">4. 清理并重新编译</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">10.2 运⾏时问题</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.2.1 初始化失败</span>
</p>
<span style="font-size:14px;line-height:2;">问题:SDK 初始化返回 InitFail (2001) </span><br />
<span style="font-size:14px;line-height:2;">可能原因和解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. ProductCode 错误:</span><br />
<span style="font-size:14px;line-height:2;">检查 ProductCode 是否正确</span><br />
<span style="font-size:14px;line-height:2;">确认在 SDK 后台已创建产品</span><br />
<span style="font-size:14px;line-height:2;">2. ⽹络问题:</span><br />
<span style="font-size:14px;line-height:2;">检查设备⽹络连接</span><br />
<span style="font-size:14px;line-height:2;">检查 Info.plist 中的⽹络权限配置</span><br />
<span style="font-size:14px;line-height:2;">3. SDK ⽂件不完整:</span><br />
<span style="font-size:14px;line-height:2;">检查所有框架⽂件是否完整</span><br />
<span style="font-size:14px;line-height:2;">重新复制 SDK ⽂件</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.2.2 登录失败</span>
</p>
<span style="font-size:14px;line-height:2;">问题:登录回调返回失败状态</span><br />
<span style="font-size:14px;line-height:2;">可能原因和解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. ⽹络问题:</span><br />
<span style="font-size:14px;line-height:2;">检查⽹络连接</span><br />
<span style="font-size:14px;line-height:2;">2. 第三⽅登录配置错误:</span><br />
<span style="font-size:14px;line-height:2;">检查 Facebook/Google 的 App ID 配置</span><br />
<span style="font-size:14px;line-height:2;">检查 URL Scheme 配置</span><br />
<span style="font-size:14px;line-height:2;">3. 权限问题:</span><br />
<span style="font-size:14px;line-height:2;">检查 Info.plist 中的权限描述</span><br />
<span style="font-size:14px;line-height:2;">检查系统权限设置</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.2.3 ⽀付问题</span>
</p>
<span style="font-size:14px;line-height:2;">问题:⽀付失败或⽆法完成。</span><br />
<span style="font-size:14px;line-height:2;">可能原因和解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 商品ID错误:</span><br />
<span style="font-size:14px;line-height:2;">检查 App Store Connect 中的商品配置</span><br />
<span style="font-size:14px;line-height:2;">确认商品ID与代码中⼀致</span><br />
<span style="font-size:14px;line-height:2;">2. 订单号重复:</span><br />
<span style="font-size:14px;line-height:2;">确保每次⽀付的订单号唯⼀</span><br />
<span style="font-size:14px;line-height:2;">检查订单号⽣成逻辑</span><br />
<span style="font-size:14px;line-height:2;">3. 沙盒环境问题:</span><br />
<span style="font-size:14px;line-height:2;">确认使⽤沙盒测试账号</span><br />
<span style="font-size:14px;line-height:2;">检查 App Store 内购配置</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.2.4 URL回调问题</span>
</p>
<span style="font-size:14px;line-height:2;">问题:第三⽅登录后⽆法回调到应⽤。</span><br />
<span style="font-size:14px;line-height:2;">解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查 URL Scheme 配置是否正确</span><br />
<span style="font-size:14px;line-height:2;">2. 检查 LSApplicationQueriesSchemes ⽩名单</span><br />
<span style="font-size:14px;line-height:2;">3. 确认 GameSDKAppDelegate.mm 中的回调处理正确</span><br />
<span style="font-size:14px;line-height:2;">4. 检查第三⽅应⽤的 URL Scheme 格式</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:2;">10.3 配置问题</span>
</h4>
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<span style="font-size:14px;line-height:2;">10.3.1 Info.plist配置</span><br />
<span style="font-size:14px;line-height:2;">问题:某些功能不⼯作,可能是 Info.plist 配置问题。</span><br />
<span style="font-size:14px;line-height:2;">检查清单:</span><br />
<span style="font-size:14px;line-height:2;">⽹络权限(NSAppTransportSecurity)</span><br />
<span style="font-size:14px;line-height:2;">URL Schemes ⽩名单(LSApplicationQueriesSchemes)</span><br />
<span style="font-size:14px;line-height:2;">第三⽅登录 URL Schemes(CFBundleURLTypes)</span><br />
<span style="font-size:14px;line-height:2;">权限描述(相册、相机、通知等)</span><br />
<span style="font-size:14px;line-height:2;">Facebook 配置项</span><br />
<span style="font-size:14px;line-height:2;">Google 配置项</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.3.2 URL Scheme配置</span>
</p>
<span style="font-size:14px;line-height:2;">问题:URL Scheme 配置后仍⽆法回调。</span><br />
<span style="font-size:14px;line-height:2;">解决⽅案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查 URL Scheme 格式是否正确</span><br />
<span style="font-size:14px;line-height:2;">2. Facebook: fb[AppID]</span><br />
<span style="font-size:14px;line-height:2;">3. Google: com.googleusercontent.apps.[ClientID]</span><br />
<span style="font-size:14px;line-height:2;">4. 确认在 Xcode 的 Info 标签中已正确配置</span><br />
<span style="font-size:14px;line-height:2;">5. 清理并重新编译</span><br />
<p>
<span style="font-size:14px;line-height:2;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:2;">10.3.3 权限问题</span>
</p>
<span style="font-size:14px;line-height:2;">问题:应⽤请求权限时崩溃或⽆法使⽤。</span><br />
<span style="font-size:14px;line-height:2;">解决方案:</span><br />
<span style="font-size:14px;line-height:2;">1. 检查 Info.plist 中是否有对应的权限描述</span><br />
<span style="font-size:14px;line-height:2;">2. 确保描述⽂字不为空</span><br />
<span style="font-size:14px;line-height:2;">3. 检查权限描述是否符合 Apple 审核要求</span><br />
<div>
<br />
</div>