我想使用GKSession连接两个设备,一个作为服务器启动,另一个作为客户端启动.使用此配置,我无法使用GKPeerPickerController.
我在连接两台设备时遇到问题:
在接口文件中我有
GKSessionDelegate
GKSession *session;
Run Code Online (Sandbox Code Playgroud)
在实现中,我使用以下代码启动服务器:
session = [[GKSession alloc] initWithSessionID:@"iFood" displayName:nil sessionMode:GKSessionModeClient];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)
客户端开始使用此代码:
session = [[GKSession alloc] initWithSessionID:@"iFood" displayName:nil sessionMode:GKSessionModeServer];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)
我如何强制使用蓝牙而不是WiFi?
我也实现了这些调用:
-(void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
NSLog(@"Someone is trying to connect");
}
- (BOOL)acceptConnectionFromPeer:(NSString *)peerID error:(NSError **)error {
NSLog(@"acceptConnectionFromPeer");
}
Run Code Online (Sandbox Code Playgroud)
当我开始时,我将其纳入调试器:
Listening on port 50775
2010-02-19 14:55:02.547 iFood[3009:5103] handleEvents started (2)
Run Code Online (Sandbox Code Playgroud)
当其他设备开始查找时,我得到了这个:
~ DNSServiceBrowse callback: Ref=187f70, Flags=2, IFIndex=2 (name=[en0]), ErrorType=0 name=00eGs1R1A..Only by Audi …Run Code Online (Sandbox Code Playgroud) 我正在构建一个使用 Game Center 的 iPhone 游戏,我很难理解如何开始一个通过收到朋友的邀请开始的比赛游戏。该文档说,这...
当应用程序直接从另一个玩家收到邀请时,acceptedInvite 参数非零。在这种情况下,其他玩家的应用程序已经创建了匹配请求,因此您的应用程序的这个副本不需要创建一个。
据此,我不需要创建匹配请求,因为进行邀请的玩家已经创建了一个。如果是这样,我如何获取向/从其他玩家发送/接收数据所需的 GKMatch 对象?我知道获取 GKMatch 对象的唯一方法是创建一个匹配请求并调用该findMatchForRequest方法,文档说我不应该这样做。
他们为此拥有的唯一代码示例涉及创建和使用GKMatchmakerViewController,我无法使用它,因为我正在创建自己的自定义视图。
非常感谢你的智慧!
我有一个游戏中心的媒人工作和实施,通过使用Game Kit的蓝牙功能,我知道我的多人游戏代码有效.当通过游戏中心沙箱在互联网上播放时,当两个设备都在WiFi上时,它可以工作,但是如果一个设备在3G上,它会很快停止发送和接收数据,因此游戏停止运行.有谁知道为什么地球上发生了这种情况?
编辑:
进一步调试后,问题是在某个点之后,3G设备上没有收到数据.有任何想法吗?
EDIT2:我创建了一个简单的测试程序,对我来说大约6,000个失败.http://dl.dropbox.com/u/2042276/Game%20Center%203G%20Test.zip(更改包ID)
有没有办法从GKTurnBasedParticipant对象中检索玩家的名字?根据班级参考,除了丑陋的玩家ID之外,似乎无法显示有关游戏玩家的相关信息.或者我错过了什么?
谢谢...
我有一些令人困惑的游戏中心问题.
我的应用程序仅在iOS 6及更高版本上运行,我一直在使用标准代码对Game Center进行身份验证:
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController,
NSError *error) {
// Respond to authentication (failure or success) here!
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,该应用程序运行良好,几周没有问题,我自己在开发过程中和~10-15 beta测试人员在临时发行版中.
在大多数情况下,对于大多数用户而言,该应用程序的行为与您期望的一样:如果您在应用程序启动时未登录游戏中心,或者登录到生产游戏中心帐户,应用程序会提示您(使用模式以游戏中心为主题的View Controller)使用Sandbox帐户登录.您登录到您的沙盒帐户,以及一切正常工作.
然而,对于一些用户来说,一些非常奇怪的事情已经开始发生.
该authenticateHandler代码被称为,error是nil的,但[GKLocalPlayer localPlayer].authenticated是NO,用户没有登录到游戏中心.最重要的是,没有模态游戏中心对话框提示用户登录.应用程序只需启动,authenticateHandler代码被调用,但不会进行身份验证.我认为如果Game Center应用程序允许我使用我的沙箱帐户登录,该应用程序将起作用,但它不会:登录或退出我的生产Game Center帐户,没有沙盒登录选项.
由于这只发生在某些用户身上,而且我的开发设备才刚刚开始发生,我非常怀疑这是我的代码存在的问题,并且我猜测它是iTunes Connect,配置文件,Game Center设置和之间的一些复杂的相互作用.设备上的历史等
我们的应用程序ID和iTunes Connect中启用了游戏中心(两者匹配都有App ID).
救命!
我的问题可能类似于iOS开发:验证Game Center用户的奇怪问题.针对该问题提出的解决方案是在Game Center应用程序中手动登录.这似乎是一个明智的解决方案,但我需要登录沙箱环境,我找不到在Game Center应用程序中获取沙盒游戏中心登录提示的方法.
你们知道任何教程或代码示例,包括使用iOS 7上的Game Center创建实时比赛吗?
所有Apple示例代码均来自2011(!),他们的文档不完整且含糊不清,并且还在谈论iOS 6.我在网上找到的所有教程都是针对iOS 6的,它们不包括实时匹配.显然苹果并不关心这一点.
有什么建议吗?
我正在尝试通过下一个代码将游戏数据保存到iCloud:
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer saveGameData:[NSData dataWithBytes:rawData->data() length:rawData->size()]
withName:[NSString stringWithUTF8String:fileName.c_str()]
completionHandler:^(GKSavedGame *savedGame, NSError *error) {
if (error == nil) {
DebugLog(@"Snapshot successfully saved");
} else {
DebugLog(@"saveSnapshot error: %@", error.description);
}
}];
Run Code Online (Sandbox Code Playgroud)
但收到错误消息: The requested operation could not be completed because you are not signed in to iCloud
我试过在iOS模拟器和设备上做这个但是没有成功.
并尝试使用测试苹果ID,开发苹果ID,新苹果ID,但也没有成功.
用户在iOS设置中登录iCloud并登录到Game Center.
有什么建议?
出于某些原因,我们不想使用GKMatchmakerViewController.目前,我们为我们的应用程序的用户提供了通过我们的UI中显示的朋友列表邀请他们的游戏中心朋友的可能性.
虽然在iOS 10中仍然可以实现,但用户将无法再添加GC好友.因此,我们希望使用iOS 10中引入的基于消息的新邀请.
如何在不使用GKMatchmakerViewController的情况下归档?我只是想显示一个按钮邀请朋友,它打开视图,向GKMatchmakerViewController中的按钮发送基于消息的邀请给任何人.
我在我的iOS游戏中实现了GameKit,包括保存的游戏功能.
这是我如何保存和加载游戏的示例:
MobSvcSavedGameData.h
#ifndef MOBSVC_SAVEDGAMEDATA_H
#define MOBSVC_SAVEDGAMEDATA_H
#import <Foundation/Foundation.h>
@interface MobSvcSavedGameData : NSObject <NSCoding>
@property (readwrite, retain) NSString *data;
+(instancetype)sharedGameData;
-(void)reset;
@end
#endif /* MOBSVC_SAVEDGAMEDATA_H */
Run Code Online (Sandbox Code Playgroud)
MobSvcSavedGameData.m
#import "MobSvcSavedGameData.h"
#import <Foundation/Foundation.h>
@interface MobSvcSavedGameData () <NSObject, NSCoding>
@end
@implementation MobSvcSavedGameData
#pragma mark MobSvcSavedGameData implementation
static NSString * const sgDataKey = @"data";
+ (instancetype)sharedGameData {
static id sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (void)reset
{
self.data = nil;
}
- …Run Code Online (Sandbox Code Playgroud) 我正在开发一个小型文字游戏作为业余项目,并选择 Flutter 来发布适用于 Android 和 iOS 的游戏。我可以使用 flutter 包(例如https://pub.dev/packages/games_services)与 Google Play Games 和 Apple Game Kit 集成,但我认为这不允许创建跨平台排行榜,但 iOS 和Android 玩家可以看到他们各自的分数。
我找到的选项:
在我开始使用 Fire Base 创建简单的评分/排行榜之前,我希望在这里找到也对此进行研究的人。有没有办法既使用 Google 和 Apple 服务,又查看统计 x 平台?我更喜欢这个,也希望能给用户带来更综合的体验,或许还能通过这个获得新用户。
感谢您的指点。