GameCenterManager icon indicating copy to clipboard operation
GameCenterManager copied to clipboard

Possible oversight with availabilityChanged delegate method

Open StewThom opened this issue 9 years ago • 1 comments

Having checkGameCenterAvailability: run in the initialisation of the class means that the availabilityChangeddelegate method will never get called under the following circumstances, • No internet • Device does not support Game Center • User has declined the sign in screen in the past

This is due to the initialisation being called before the delegate is set and the delegate cannot be set without first initialising the class.

I have a workaround by wrapping the delegate call backs in a dispatch block like so:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      NSDictionary *errorDictionary = @{@"message": @"Player is not signed into GameCenter, has 
      declined to sign into GameCenter, or GameKit had an issue validating this game / app.", @"title":  
      @"Player not Authenticated"};

       if ([[self delegate] respondsToSelector:@selector(gameCenterManager:availabilityChanged:)])
              [[self delegate] gameCenterManager:self availabilityChanged:errorDictionary];
});

It is a slight oversight but possibly something you could look at changing in the future.

StewThom avatar Feb 18 '16 16:02 StewThom

Yes I would recommend not using in the AppDelegate at all and calling it on ViewDidLoad or Manually

danoli3 avatar Aug 04 '22 03:08 danoli3