Search Unity

GameCenter Plugin Live! Leaderboards and Achievements!

Discussion in 'iOS and tvOS' started by prime31, Sep 6, 2010.

  1. Hesham

    Hesham

    Joined:
    May 29, 2008
    Posts:
    147
    Yup you are right, it is not the plugin.

    The player was not being authenticated was because I pressed cancel 3 times when the login prompt appeared. Once you do that GameCenter will not show you the login box again.
     
  2. avatara359

    avatara359

    Joined:
    May 12, 2010
    Posts:
    41
    I'm having a similar problem with authentication. I'm calling "GameCenterBinding.authenticateLocalPlayer();" at start. The GameCenter popup appeared the first couple of times but I closed it with out logging in. Now it wont show up at all, even if I delete the app and re-install. How can I force GameCenter to ask again for a login?

    Right now I'm getting:
    using iOS 6+ authentication handler
    GKPlayerAuthenticationDidChangeNotification fired
    PlayerLoggedOut()
    _StoreAuthentification failed with -> The requested operation has been cancelled or disabled by the user. // might be from storekit?
    _StoreScore fethching failed! -> The requested operation could not be completed because local player has not been authenticated.
     
  3. Hesham

    Hesham

    Joined:
    May 29, 2008
    Posts:
    147
    You need to do a complete reset of your iPhone (settings->general->reset->Reset ALL Settings)

    That's the way I did, if there is any other way maybe someone can let us know.
     
  4. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @avatara, it is unfortunate, but like @hesham says you have to do a reset. For more information you can peruse this Stack Overflow post or search Stack Overflow for lots of other posts describing the situtation.
     
  5. jeroenx000

    jeroenx000

    Joined:
    Oct 4, 2012
    Posts:
    27
  6. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @jeroenx, in the future please refrain from cross posting in multiple support sites. Pick one and post only there. All it does is make life more difficult for future users searching and reading the sites when you do that.
     
  7. jeroenx000

    jeroenx000

    Joined:
    Oct 4, 2012
    Posts:
    27
    hello prime31,


    sorry about that. my gc is working now but have the wrong orientation, our game is on protrait but the leaderboard shows landscape.

    thanks.

    -done it-

    just activated the auto rotation, but still set it to portrait and it fixed itself
     
    Last edited: Mar 3, 2014
  8. NagarajVasu

    NagarajVasu

    Joined:
    Jun 5, 2013
    Posts:
    26
    Hi prime[31],

    I got this error when I have to build in xcode 5.0.1,

    I am using unity 4.3.3 and xcode 5.0.1...I don't know why it comes on xcode...It was a client project I was working two weeks before itself.The client has been worked this project with iPhone 3g.He has to provide these code to myself for build the project with new version project.Like which will play all version device's.this is the requirement client told...what I have to do for this issue.

    And one more thing,without prime31 package the project was running successfully.

    With prime31 package I project was showing below error's.

    what I have to do for this error?

    Otherwise I need to upgrade my prime31 package


    "__storeKitValidateReceipt", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitValidateAutoRenewableReceipt", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitGetAllSavedTransactions", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterShowLeaderboardWithTimeScopeAndLeaderboardId", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterShowLeaderboardWithTimeScope", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitPurchaseProduct", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterShowCompletionBannerForAchievements", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterShowAchievements", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveAchievementMetadata", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterPlayerIdentifier", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterResetAchievements", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveFriends", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSetMute", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerShowFriendRequestControllerWithOptions", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterPlayerAlias", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerAddPlayersToCurrentMatch", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSetVolume", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterReportScore", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerShowMatchmakerWithMinMaxPlayers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSendRawMessageToPeers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveScoresForPlayerIdAndLeaderboard", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerEnableMicrophone", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSendMessageToAllPeers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitRequestProductData", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerStartVoiceChat", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveScoresForLeaderboard", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveScoresForPlayerId", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerIsVOIPAllowed", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerCloseAllOpenVoiceChats", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterRetrieveScores", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterIsGameCenterAvailable", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerFindMatchProgrammaticallyWithMinMaxPlayers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerFindAllActivity", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterLoadPlayerData", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerDisconnectFromMatch", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerShowMatchmakerWithFilters", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerAddAndStartVoiceChatChannel", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerShowFriendRequestController", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterLoadLeaderboardLeaderboardTitles", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterIsPlayerAuthenticated", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerReceiveUpdates", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSendMessageToPeers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitCanMakePayments", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerFindMatchProgrammaticallyWithFilters", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerCancelProgrammaticMatchRequest", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterGetAchievements", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerFindAllActivityForPlayerGroup", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterGetAllConnectedPlayerIds", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterReportAchievement", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerEnableVoiceChat", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__storeKitRestoreCompletedTransactions", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterMultiplayerSendRawMessageToAllPeers", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterIsUnderage", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    "__gameCenterAuthenticateLocalPlayer", referenced from:
    RegisterMonoModules() in RegisterMonoModules.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)


    thanks in advance.
     
  9. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
  10. boddole

    boddole

    Joined:
    Sep 18, 2013
    Posts:
    35
    Hello everyone, I'm new to Prime 31's Game Center plugin for iOS, but everything had been going great (authenticating user, uploading scores) until...:

    I tried to load a leaderboard, which causes XCode 5 to crash (note that it will run in Unity up until the point where it requires Apple's servers, at which point nothing will happen and I can continue running the program). The bit of code that causes this is below. Note that I have commented almost everything out as it makes no difference in causing the crash. The part that I find strange is that even the text label won't update before crashing (which is odd because I use it more than once in my test scene).

    Code (csharp):
    1.     public void ShowScore() //used by ngui button click
    2.     {
    3.         //if (GameCenterBinding.isPlayerAuthenticated())
    4.         {
    5.             Debug.Log ("the player is authenticated");
    6.             label6.text = "attempting to load score board";    
    7.  
    8. GameCenterBinding.showLeaderboardWithTimeScopeAndLeaderboard(GameCenterLeaderboardTimeScope.AllTime, "TestLeaderBoard");
    9.         }
    10.  
    11.         //else if (!GameCenterBinding.isPlayerAuthenticated())
    12.         {
    13.             //label6.text = "player not logged in, not attempting to show scores";
    14.         }
    15.     }
    This causes the entire app to lock up, and this is the resulting log page from XCode:

    gamecentertest`scripting_method_invoke(ScriptingMethod*, MonoObject*, ScriptingArguments, MonoException**) at ScriptingBackendApi_Mono.cpp:165:
    0xc602d4: push {r4, r5, r6, r7, lr}
    0xc602d8: mov r4, r3
    0xc602dc: ldr r3, [r0, #4]
    0xc602e0: mov r5, r1
    0xc602e4: add r7, sp, #0xc
    0xc602e8: cmp r3, #0x0
    0xc602ec: beq 0xc60300 ; scripting_method_invoke(ScriptingMethod*, MonoObject*, ScriptingArguments, MonoException**) + 44 at ScriptingBackendApi_Mono.cpp:183
    0xc602f0: mov r0, r5
    0xc602f4: mov r1, r4
    0xc602f8: blx r3
    0xc602fc: pop {r4, r5, r6, r7, pc}
    0xc60300: ldr r6, [r0]
    0xc60304: mov r0, r2
    0xc60308: bl 0xcf16dc ; ScriptingArguments::InMonoFormat() at ScriptingArguments.cpp:153
    0xc6030c: mov r1, r5
    0xc60310: mov r3, r4
    0xc60314: mov r2, r0
    0xc60318: mov r0, r6
    0xc6031c: bl 0x114d570 ; mono_runtime_invoke
    0xc60320: pop {r4, r5, r6, r7, pc}

    If anyone has a clue as to what is going on, I would really appreciate it if you could point me in the right direction.
     
    Last edited: Mar 13, 2014
  11. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @boddole, your issue is definitely on the Unity side. That is all Mono methods in the backtrace. You can confirm by running the demo scene (a known working setup) and showing the leaderboard.
     
  12. boddole

    boddole

    Joined:
    Sep 18, 2013
    Posts:
    35
    I see, I noticed today that when I opened Unity, I got 2 warnings about "FindObjectsOfType can only be called from the main thread". One of those errors pointed at (the other pointed at nothing):

    I'm sure I'm using something wrong, any ideas on what the probable cause is?
     
  13. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @boddle, the GameCenterManager should *not* be on any GameObject in your scene. Remove it from your scene and it will clear up the warning.
     
  14. boddole

    boddole

    Joined:
    Sep 18, 2013
    Posts:
    35
    You are correct about the errors, thank you for the advice. Unfortunately trying to load the scores is still crashing XCode...
     
  15. mturtle

    mturtle

    Joined:
    Mar 18, 2014
    Posts:
    3
    Hello!

    I'm looking into using Prime31's Game Center implementation. Does anyone know if there is a way to call GKLocalPlayer's generateIdentityVerificationSignatureWithCompletionHandler method? Either in Prime31 or, if not, in Unity's Social API?
     
  16. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @mturtle, identity generation is not supported in the current version of the plugin. It will be added at some point in a future update.
     
  17. mturtle

    mturtle

    Joined:
    Mar 18, 2014
    Posts:
    3
    Thanks for the response.
     
  18. mturtle

    mturtle

    Joined:
    Mar 18, 2014
    Posts:
    3
    Another question. In Objective-C, our app currently receives the game center login view controller in a handler. We can choose when or if to display it. For instance we test for authentication on login, but if they're not logged into game center, we don't show the user the login view controller unless they manually select connect with game center elsewhere in the app.

    I can't figure out how to do this in Prime31. Do we have any control over when the game center login view controller is shown?
     
  19. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @mturtle, the login view controller is shown when you call authenticate if the user is not already logged in.
     
  20. _sequel_

    _sequel_

    Joined:
    Apr 7, 2014
    Posts:
    5
    Hi Prime. I'm trying to retrieve the players highest score and format it myself in the game. So far I have:

    But can't figure out how to format it such that I can display it as a String. Right now "GlobalHiScoreString " returns a nullreference which I assume it because I call it before its been retrieved, yet, I'm not sure how to know when its been retrieved.

    Thanks!
     
    Last edited: Apr 7, 2014
  21. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    The GameCenterScore class contains a formattedValue field that is a string already. I assume you are getting a NullReferenceException due to trying to access scores before it has loaded. Wait for it to load before you attempt to use it.
     
  22. _sequel_

    _sequel_

    Joined:
    Apr 7, 2014
    Posts:
    5
    So how does the scoresLoaded function actually get called? Is it just when I use

    GameCenterBinding.retrieveScoresForPlayerId(GameCenterBinding.playerIdentifier(), "HighScore" );

    ??

    I never see "scoresLoaded" in my debug log so I feel like that's kiiiind've a problem.

    Thanks Prime!
     
  23. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    The event will fire after the scores are loaded. Use the demo scene and watch the logs. It will dump every single event that fires to the log and include the event name as it happens.
     
  24. _sequel_

    _sequel_

    Joined:
    Apr 7, 2014
    Posts:
    5
    Thanks Prime.

    My problem right now is I don't think my reporting of the score is working properly. I assumed it was and that the score just wouldn't show up on the leaderboard in the Sandbox environment but now I feel like I actually did something wrong. And just to be sure, I have left it for a while to post and it never showed up.

    My code looks like:

    Code (csharp):
    1.  
    2. var reportedScore : boolean = false;
    3.  
    4. function Start()
    5. {
    6. GameCenterManager.reportScoreFinished += reportScoreFinished;
    7. }
    8.  
    9. function reportScoreFinished()
    10. {
    11.     Debug.Log( "reportScoreFinished event fired" );
    12.     reportedScore = true;
    13. }
    14.  
    15.  
    16. function Update () {
    17.         if (!reportedScore)
    18.         {
    19.             GameCenterBinding.reportScore( scoreCounter, "Leaderboard" );
    20.         }
    21. }
    22.  
    Am I doing something wrong? Thanks for your help!
     
  25. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @sequel, lets start with the basics. Are you seeing the "reportScoreFinished event fired" log? If so, then your code is working fine. Please refer to the big note from the documentation for information about the way the sandbox servers work:

    $Screen Shot 2014-04-08 at 11.49.16 PM.png
     
  26. _sequel_

    _sequel_

    Joined:
    Apr 7, 2014
    Posts:
    5
    Ya, I get that event. So I guess it was just me being paranoid. Thanks Prime!! :D
     
  27. femoreti

    femoreti

    Joined:
    May 9, 2014
    Posts:
    4
    Hello @prime31, I've Just build Prime31 GameCenter Demo for IOS and I keep getting this error: playerFailedToAuthenticate: The requested operation has been cancelled or disabled by the user.

    I've already check my bundle ID and Bundle Version and set GameCenter configs in ItunnesConnect.

    Please Help >.<
     
  28. femoreti

    femoreti

    Joined:
    May 9, 2014
    Posts:
    4
  29. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    @femoreti, that is indeed a horrible bug currently with the Apple sandbox. As you found out you have to just reset your device to get GameCenter operational again.
     
  30. badawe

    badawe

    Joined:
    Jan 17, 2011
    Posts:
    297
    Does anyone have one a idea of what is the best way to discovery the Players Position in Leaderboard? Like 1º, 2º 16º?
     
  31. Moonjump

    Moonjump

    Joined:
    Apr 15, 2010
    Posts:
    2,572
    I'm am currently in the middle of a Microsoft Unity porting day. I am porting an old game from iOS to WP8 that uses the Prime31 Game Center plugin on iOS. When I try to build the WP8 app I get an error that mentions Prime31. I deleted the Editor and Plugin folders. But when I try to do another build, I still get the error and the Plugin folder has reappeared, containing P31RestKit.

    Even deleting the folder and then reimporting assets causes the folder to reappear. What can I do to remove all trace of Prime31 from this project and keep it that way?

    The error is:

     
  32. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    To remove all traces of a plugin just delete all the plugin files and don't reimport the plugin.
     
  33. Moonjump

    Moonjump

    Joined:
    Apr 15, 2010
    Posts:
    2,572
    That is what I was doing in Unity. It was just re-appearing without me doing anything. In the end I had to delete the folder in Windows Explorer and risk it breaking meta data (I used a copy of the project).
     
  34. sanjodev

    sanjodev

    Joined:
    May 29, 2012
    Posts:
    63
    @prime31 do you know when players are connected in a multiplayer match and I call a method like SendRawMessageToPeers(), if the message goes directly to the peers, or does it go through some server on Apple's side, and then sent to the peers?
     
  35. prime31

    prime31

    Joined:
    Oct 9, 2008
    Posts:
    6,426
    GameCenter multiplayer is all peer-to-peer. A server is only involved for the matchmaking.
     
  36. sanjodev

    sanjodev

    Joined:
    May 29, 2012
    Posts:
    63
    Can we get a overload for sendRawMessageToPeers that exposes the length parameter for byte[] parameter? I see its used behind the scenes as a dll imported function. Currently, I just modified the .cs file and now have access to it, but would like it to be a permanent change so that when I update the code, I don't have to integrate any custom changes on my part. I need this because I now reuse byte[] buffers in set block sizes, so that I don't have to allocate a new exact size byte[] every time I need to send data.
     
  37. Anatolii_Landyshev

    Anatolii_Landyshev

    Joined:
    Aug 10, 2012
    Posts:
    31
    Since Prime31 doesn't support GKLocalPlayer's generateIdentityVerificationSignatureWithCompletionHandler method I've implemented the plugin that supports this feature and works well with prime31 Game Center plugin. Please, check Login with Game Center plugin in Asset Store.
     
  38. DreamEnder

    DreamEnder

    Joined:
    Apr 12, 2011
    Posts:
    191
    Hey Prime,

    My game used to work when I called GameCenterBinding.loadPlayerData.

    However now with iOS 8 I not receiving any callback when calling that method. I'm listening to both completed and failed events but nothing is printing to console. The game including multiplayer is working fine. However I can't get the names of the connected players.
     
  39. Drowning-Monkeys

    Drowning-Monkeys

    Joined:
    Mar 6, 2013
    Posts:
    328
    @prime31 I'm sorry if i'm asking a question that's been asked before but i can't find it anywhere. I am trying to use your iOS plugins (Game Center and Storekit) and also do a custom build using the buildplayerpipeline. If I simply click "Build and Run", then the plugin works. If i use my custom build script:
    BuildPipeline.BuildPlayer(levels, "iOS Builds", BuildTarget.iPhone, iOSBuildOptions);

    Then I get the following error in Xcode:
    clang: error: no such file or directory: '/Users/Chud/Documents/Unity/DTSQ_NewEZGUI/iOS Builds/iOS Builds/Prime31Shared/P31Unity.mm'

    Thoughts?
     
  40. Drowning-Monkeys

    Drowning-Monkeys

    Joined:
    Mar 6, 2013
    Posts:
    328
    Hate it when that happens... found a post that solved it. Bad Pathname...
    http://forum.unity3d.com/threads/buildplayer-function-and-plugins.108006/#post-714524
     
  41. jerodfehr

    jerodfehr

    Joined:
    May 12, 2015
    Posts:
    1
    @prime31 Fantastic plugin, the xcode integration is top-notch and I greatly appreciate not having to manually link libraries :)

    We have an interesting issue that only seems to affect iPhone 5/6 on iOS 8.0+ (does not occur on iOS 6/7). We are running Unity 5.0.1f1.

    Our app locks the screen orientation to landscape-left, and gamecenter loads properly unless you are holding the phone in portrait / reverse-portrait. Doing so causes the app to continuously flip it's screen back and forth until the app is closed or in some cases, the device hard crashes (to the apple logo).

    Holding the phone in landscape-right and launching game-center somehow forces the orientation out of landscape-left for the duration of the gameCenter session, and then flips back once it is complete.

    If you have absolutely no idea what is causing this, or how to fix it, perhaps is there a callback that is fired when the user closes the game center window / returns back to the app? (I couldn't find one)

    Thanks for your time.
     
  42. MadByteLabs

    MadByteLabs

    Joined:
    May 29, 2011
    Posts:
    18
    Hi& I use in project StoreKit and GameCenter plugins. StireKit work succesfull. I test your example for GameCenter
    Code (CSharp):
    1.     void Start ()
    2.         {
    3.             // use anonymous delegates for this simple example for gathering data from GameCenter. In production you would want to
    4.             // add and remove your event listeners in OnEnable/OnDisable!
    5.             GameCenterManager.categoriesLoadedEvent += delegate( List<GameCenterLeaderboard> leaderboards ) {
    6.                 _leaderboards = leaderboards;
    7.                 _hasLeaderboardData = _leaderboards != null && _leaderboards.Count > 0;
    8.             };
    9.  
    10.             GameCenterManager.achievementMetadataLoadedEvent += delegate( List<GameCenterAchievementMetadata> achievementMetadata ) {
    11.                 _achievementMetadata = achievementMetadata;
    12.                 _hasAchievementData = _achievementMetadata != null && _achievementMetadata.Count > 0;
    13.             };
    14.  
    15.             // after authenticating grab the players profile image
    16.             GameCenterManager.playerAuthenticatedEvent += () =>
    17.             {          
    18.                 GameCenterBinding.loadProfilePhotoForLocalPlayer ();
    19.                 loadFriends ();
    20.             };
    21.  
    22.             // always authenticate at every launch
    23.             GameCenterBinding.authenticateLocalPlayer ();
    24.         }
    And see in xCode

    Code (CSharp):
    1. 2015-08-08 13:14:08.742 project[12335:3367527] adding GKChallengeEventHandler. this means we are on iOS6+/ML+
    2. 2015-08-08 13:14:08.743 project[12335:3367527] using iOS 6+ authentication handler
    3. 2015-08-08 13:14:11.281 project[12335:3367527] authenticationChanged. isAuthenticated: YES
    4. 2015-08-08 13:14:11.282 project[12335:3367527] we are iOS 7+ so registering the local player listener
    5. 2015-08-08 13:14:11.283 project[12335:3367527] GKPlayerAuthenticationDidChangeNotification fired. isAuthenticated: YES
    6. 2015-08-08 13:14:11.283 project[12335:3367527] GameCenterMultiplayer invite handler setup
    7. 2015-08-08 13:14:11.284 project[12335:3367527] GKPlayerAuthenticationDidChangeNotification fired. isAuthenticated: YES
    8. SendMessage: object GameCenterManager not found!
    9. 2015-08-08 13:14:11.349 project[12335:3367527] we are iOS 7+ so registering the local player listener
    10. 2015-08-08 13:14:11.350 project[12335:3367527] GKPlayerAuthenticationDidChangeNotification fired. isAuthenticated: YES
    11. SendMessage: object GameCenterManager not found!
    12. SendMessage: object GameCenterManager not found!
    13. SendMessage: object GameCenterManager not found!
    14. SendMessage: object GameCenterManager not found!
    15. SendMessage: object GameCenterManager not found!
    I test, GameCenterManager.playerAuthenticatedEvent after authentication is not called.
    Thanks.