跳转至

SceneDelegate

从 2027 年 4 月起,上传至 App Store Connect 的应用必须使用 iOS SDK 27 或更高版本构建。使用 SDK 27 构建的 UIKit 应用必须采用 UIScene 生命周期,才能在 iOS 27 上启动。参见 Apple 提交要求和场景迁移指南。

请使用 SohaSDK 1.3.2.6 或更高版本。如果应用已有 SceneDelegate,请保留现有配置并添加下方 URL 转发代码。

1. 配置 Info.plist

为单场景 Objective-C 应用添加以下配置:

<key>UIApplicationSceneManifest</key>
<dict>
    <key>UIApplicationSupportsMultipleScenes</key>
    <false/>
    <key>UISceneConfigurations</key>
    <dict>
        <key>UIWindowSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneConfigurationName</key>
                <string>Default Configuration</string>
                <key>UISceneDelegateClassName</key>
                <string>SceneDelegate</string>
            </dict>
        </array>
    </dict>
</dict>

2. 添加 SceneDelegate

对于 Cocos 或 Unity 项目,请在导出的 iOS 项目中,按照所用引擎版本支持的方式配置场景生命周期。

  • 如果项目已有场景委托,请修改现有类;否则,将场景委托类添加到应用 Target,并在 UISceneDelegateClassName 中填写对应类名。
  • 保留引擎的游戏视图和启动流程,将其窗口关联到 UIWindowScene,无需另外创建游戏视图。
  • 在场景委托中导入 <SohaSDK/SohaSDK.h>,并添加以下方法:
- (void)scene:(UIScene *)scene
    openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
    [SohaKit openURLContexts:URLContexts];
}

3. 更新 AppDelegate

  • 将 SDK 初始化保留在 application:didFinishLaunchingWithOptions: 中,且只调用一次。此方法应返回 YES。
  • 将 SohaDelegate 回调保留在 AppDelegate 中。SceneDelegate 负责窗口配置和 scene:openURLContexts:。

Appdemo 示例

Appdemo 的登出和支付回调使用 AppDelegate.window。因此,其 SceneDelegate 在连接场景时将场景窗口赋给该属性,并在断开时清除引用。这是 Appdemo 的实现方式;Cocos/Unity 项目请沿用自身的窗口管理方式。

4. 验证

使用 iOS SDK 27 构建,在 iOS 27 和最低支持的 iOS 版本上测试:启动、Facebook/Google 登录回调、前后台切换、登出和支付。