You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI中调出GameKit添加好友界面?

在SwiftUI中调出Game Center添加好友界面的解决方案

你遇到的核心问题是直接传入空的UIViewController()无法关联到当前SwiftUI的视图层级,导致弹窗无法正常显示。解决思路是获取当前应用的顶层视图控制器,再将其传入GameKit的方法中。

步骤1:添加获取顶层视图控制器的扩展

先给UIApplication写一个扩展,用来获取当前活跃的顶层视图控制器:

import UIKit

extension UIApplication {
    func topViewController() -> UIViewController? {
        // 获取当前活跃的前台窗口
        let keyWindow = connectedScenes
            .filter({ $0.activationState == .foregroundActive })
            .compactMap({ $0 as? UIWindowScene })
            .first?
            .windows
            .first(where: { $0.isKeyWindow })
        
        // 遍历找到最顶层的视图控制器
        var topVC = keyWindow?.rootViewController
        while let presentedVC = topVC?.presentedViewController {
            topVC = presentedVC
        }
        return topVC
    }
}

步骤2:在SwiftUI中调用弹窗

修改你的ContentView,用上面的方法获取顶层VC后调用GameKit的添加好友方法:

import SwiftUI
import GameKit

struct ContentView: View {
    var body: some View {
        Button(action: {
            guard let topViewController = UIApplication.shared.topViewController() else {
                print("无法获取当前视图控制器")
                return
            }
            
            do {
                try GKLocalPlayer.local.presentFriendRequestCreator(from: topViewController)
            } catch {
                print("调出添加好友界面失败:\(error.localizedDescription)")
            }
        }) {
            Text("添加好友")
        }
    }
}

注意事项

  • 确保已完成GameKit的项目集成与用户授权(如开启Game Center能力、请求玩家授权等),否则调用方法会抛出错误。
  • 该方法适配iOS 13及以上系统(使用connectedScenes获取窗口,替代旧版的keyWindow)。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:43