【问题标题】:Why GKSession always tries to use bluetooth when running on a device and doesn't on simulator?为什么 GKSession 在设备上运行时总是尝试使用蓝牙而不是在模拟器上?
【发布时间】:2012-06-05 12:04:13
【问题描述】:

我正在尝试在不使用 GKPeerPickerController 的情况下实现 GameKit 连接。我需要的是建立 WiFi 连接,而不是蓝牙。

我就是这样做的

self.gameSession = [[GKSession alloc] initWithSessionID:@"test" displayName:nil sessionMode:GKSessionModePeer];
self.gameSession.available = YES;
self.gameSession.delegate = self;
self.gameSession.disconnectTimeout = 0;
[self.gameSession setDataReceiveHandler:self withContext:nil];

我的问题是设备总是尝试通过蓝牙连接。至少我是这么认为的,因为控制台中总是出现以下内容

BTM:附加到 BTServer

即使我关闭蓝牙,它总是会尝试处理蓝牙,而不是 wifi。此外 - 如果蓝牙打开 - 如果我不使用 GKPeerPickerController,设备永远不会互相看到。 此外,模拟器从不尝试寻找蓝牙,并且始终能够建立 wifi 连接并轻松找到任何设备。如何让 GKSession 选择 WiFi 连接?

【问题讨论】:

    标签: iphone wifi p2p gamekit gksession


    【解决方案1】:

    可能是您的越狱设备问题,

    GKSession 和 GKSessionDelegate 实现适用于蓝牙和 WiFi。

    这两个类检查wifi和蓝牙,并选择合适的传输介质。

    如果您的 iPhone 越狱,那么在通过这些传输介质连接时,蓝牙或 wifi 可能会出现一些问题,这可能会妨碍您正确使用 gamekit。

    也尝试使用

    picker.connectionTypesMask = GKPeerPickerConnectionTypeOnline
    

    检查委托方法中的条件

    if (type == GKPeerPickerConnectionTypeOnline) {
    }
    

    更新:

    参考苹果的这个示例代码.. https://developer.apple.com/library/ios/#samplecode/GKTapper/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010283

    【讨论】:

    • 非常感谢您的回答。我不使用越狱设备。我的目标是在不使用 GKPeerPickerController 的情况下建立连接。我已经尝试过 GKPeerPickerController,特别是您提供的代码片段,但不幸的是它不起作用。你有没有试过在没有 GKPeerPickerController 的情况下使用 GKSession?
    • 不,伙计,没有 GKPeerPickerController,我没有使用它。为什么你不喜欢 GKPeerPickerController?
    • 因为我需要建立 WiFi 连接
    • 所以我改变了我的问题 - 你有没有成功通过 WiFi 连接两个设备和 GameKit?
    • 是的,在 GKSession 和 GKSessionDelegate 的帮助下,我创建了一个供两个玩家玩的游戏,Game Center、蓝牙、Wifi..
    猜你喜欢
    • 2020-12-11
    • 2012-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多