2015-08-06 28 views
5

olarak adlandırılmıştır. Benim oyun merkezi sınıfında GKLocalPlayerListener protokolü uygulanmış ve en kısa sürede o doğrulanmış oluyor olarak dinleyici olarak yerel oyuncu eklemek ettik:GKLocalPlayerListener protokolü

func authenticationChanged() { 
    if (GKLocalPlayer.localPlayer().authenticated && !self.userAutenticated) { 
    println("Authentication changed: player authenticated.") 
    userAutenticated = true 
    GKLocalPlayer.localPlayer().unregisterAllListeners() 
    GKLocalPlayer.localPlayer().registerListener(self) 
    } else if (GKLocalPlayer.localPlayer().authenticated && self.userAutenticated) { 
    println("Authentication changed: player not authenticated.") 
    userAutenticated = false 
    } 
} 

Protokol uygulanmasını:

// MARK: - GKLocalPlayerListener 
func player(player: GKPlayer!, didAcceptInvite invite: GKInvite!) { 
    println("Did accept invite") 
} 
func player(player: GKPlayer!, didRequestMatchWithRecipients recipientPlayers: [AnyObject]!) { 
    println("Did request matchmaking") 
} 

bu 2 yöntemlerin hiçbiri denir Bir arkadaşımı davet etmeye çalışıyorum ve ayrıca herhangi bir bildirim almadım. Oyunu serbest bırakma modunda denemeye çalıştım ama aynı sonucu elde ettim. Normal eşleştirmenin düzgün çalıştığını söylemeliyim, herhangi bir sorun yaşamadan oynayacağım oyuncuyu bulabiliyorum.

DÜZENLEME:

i bildirim alınacak 2 cihazlardan test ama bildirimini dokunursanız, uygulama açık olacak ve hiçbir temsilci çağrılacak test edin. Uygulamayı kapatıp tekrar başlatırsam, o zaman GKLocalPlayerListener denir.

Sorun nedir?

+0

:

Gerçekten yararlı WWDC 2012 bu videoyu buldum. –

+0

Hayır, bu sorunu çözmedi. Kullanıcı doğru şekilde doğrulanmış ve temsilci çalışmıyor –

cevap

0

Ben varsayalım Eğer bir matchmakerviewcontroller sundular: "Normal çöpçatanlık çalışır" derken, o:

-(void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match{ 
//Called when GameCenter completes the matchmaking process 
match.delegate = (id)self; //etc. lots of your own code here. 
: oyuncular çağrılacak matchmakerviewcontroller didFindMatch bulunur Sonra

-(IBAction)setupMatch:(id)sender{ 
GKMatchmakerViewController *matchViewController = [[GKMatchmakerViewController alloc] initWithMatchRequest:matchRequest]; 
matchViewController.matchmakerDelegate = self; 
[self presentViewController:matchViewController animated:YES completion:nil];} 

didAcceptinvite yalnızca davetiyeyi kabul ettikten sonra bir alıcının cihazında çağrılır:

-(void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite{ 
//Called on the accepting device when the invitation is accepted 
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:invite]; 
mmvc.matchmakerDelegate = self; 
[self presentViewController:mmvc animated:YES completion:nil]; 

}

Bu, arkadaşınıza bir matchmakerviewcontroller sunar. Onların yapması gereken bir şey yoktur, vc bağlantıyı yapar ve sonra kendini reddeder. Gönderen cihazındaki vc aynı anda reddeder.

Daha sonra her iki aygıtta daFindMatch çağrıldı ve siz gidin.

Ben didrequestMatchWithRecipients hiç çağrıldığından emin değilim ve didFindMatch ve didAcceptInvite anlaşma her iki ucunda da başlamasıyla gereksiz görünüyor. Muhtemelen sadece kimlik doğrulama false değiştirilirse `unregisterAllListeners` çağırmanız gerekir WWDC 2012 Christy Warren