2015-08-06 23 views
5

Theo hướng dẫn của Apple cho biết; Tôi đã thực hiện giao thức GKLocalPlayerListener trong lớp trung tâm trò chơi của tôi và thêm các cầu thủ địa phương như người nghe càng sớm càng anh ấy chứng thực: thực hiệnGiao thức GKLocalPlayerListener không được gọi là

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 
    } 
} 

Protocol:

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

Không ai trong số 2 phương pháp này nó được gọi là khi Tôi cố gắng mời một người bạn và tôi cũng không nhận được bất kỳ loại thông báo nào. Tôi đã thử kiểm tra trò chơi ở chế độ phát hành nhưng tôi đã có kết quả tương tự. Tôi phải nói rằng mai mối bình thường hoạt động chính xác, tôi có thể tìm người chơi để chơi mà không gặp bất kỳ sự cố nào.

EDIT:

Nếu tôi thử nghiệm kiểm tra nó từ 2 thiết bị, các thông báo sẽ được nhận nhưng nếu tôi gõ vào thông báo, ứng dụng sẽ được mở và không có đại biểu sẽ được gọi. Nếu tôi đóng ứng dụng và khởi động lại nó, sau đó gọi là GKLocalPlayerListener.

Có gì sai?

+0

Bạn có thể chỉ cần gọi 'unregisterAllListeners' nếu xác thực được thay đổi thành false. –

+0

Không, điều đó không giải quyết được vấn đề. Người dùng được xác thực chính xác và người được ủy quyền không hoạt động –

Trả lời

0

tôi cho rằng, khi bạn nói "mai mối bình thường hoạt động" mà bạn đã trình bày một matchmakerviewcontroller:

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

Sau đó, khi các cầu thủ được tìm thấy trong didFindMatch matchmakerviewcontroller sẽ được gọi là:

-(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. 

didAcceptinvite chỉ được gọi trên thiết bị của người nhận lời mời sau khi họ chấp nhận lời mời:

-(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]; 

}

Trình bày điều khiển matchmakerview cho bạn bè của bạn. Không có gì để họ làm, vc tạo kết nối và sau đó tự bỏ qua. Vc trên thiết bị của người gửi sẽ loại bỏ cùng một lúc.

Sau đó didFindMatch được gọi trên cả hai thiết bị và bạn không sử dụng.

Tôi không thuyết phục được dorequestMatchWithRecipients được bao giờ gọi và dường như dư thừa khi didFindMatch và didAcceptInvite đối phó với trò chơi bắt đầu ở cả hai đầu.

tôi tìm thấy video này từ WWDC 2012 thực sự hữu ích: WWDC 2012 Christy Warren

Các vấn đề liên quan