質問のタイトルがかなりありますが、authPlayerWithCompletionHandlerは廃止予定です。したがって、authenticateHandlerはどのように使用しますか?authPlayerWithCompletionHandlerどうすればauthenticateHandlerを使用するのですか?
答えて
setAuthenticateHandlerは、iOS 6で、authenticateWithCompletionHandlerはまだ下記のiOS 5とで使用されなければならない新しいものです。
また、presentViewController:animated:completion:の完了ハンドラを提供することは、完了時ではなく、ゲームセンタービューが表示された直後に完了ハンドラが呼び出されるため、実際には必要ありません。ではない実際のデバイス上で - - 6.0シミュレータのみのiOS 4.3、iOSの5.1、iOSの上でテスト
注:
は、ここに私のソリューションです。
注 - これはGameCenter APIが利用可能であることを確認したことを前提としています。
- (void)checkLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (localPlayer.isAuthenticated)
{
/* Perform additional tasks for the authenticated player here */
}
else
{
/* Perform additional tasks for the non-authenticated player here */
}
}
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] \
compare:v options:NSNumericSearch] == NSOrderedAscending)
- (void)authenticateLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (SYSTEM_VERSION_LESS_THAN(@"6.0"))
{
// ios 5.x and below
[localPlayer authenticateWithCompletionHandler:^(NSError *error)
{
[self checkLocalPlayer];
}];
}
else
{
// ios 6.0 and above
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (!error && viewcontroller)
{
[[AppDelegate sharedDelegate].viewController
presentViewController:viewcontroller animated:YES completion:nil];
}
else
{
[self checkLocalPlayer];
}
})];
}
}
}
うまく機能します!あなたはどうしたら廃止されたメソッドの警告フラグを取り除きますか? – msgambel
デプロイメントターゲットをたとえばに設定します。 5.0またはあなたのターゲットが何であれ - プロジェクト(プロジェクトナビゲータの一番上の行)を選択し、ターゲット>概要>デプロイメントターゲットでアプリを選択します。 –
これは私が思いついたものです。これはうまくいくようです。私が何かを見逃したと思ったら、編集してください。
-(void)authenticatePlayer {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (!error) {
[self presentViewController:viewcontroller animated:YES completion:^{
if (localPlayer.isAuthenticated)
{
// your code if authenticated
}
else {
// your code if not authenticated
}
}];
}
else {
// error handling code here
}
})];
}
私はこのコードをiOS 6以上で使用しています。コンパイラのエラーはなく、正常に動作しているようです。
#pragma
#pragma mark - Player Authentication
-(void)autheticatePlayer
{
__weak typeof(self) weakSelf = self; // removes retain cycle error
_localPlayer = [GKLocalPlayer localPlayer]; // localPlayer is the public GKLocalPlayer
__weak GKLocalPlayer *weakPlayer = _localPlayer; // removes retain cycle error
weakPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
{
if (viewController != nil)
{
[weakSelf showAuthenticationDialogWhenReasonable:viewController];
}
else if (weakPlayer.isAuthenticated)
{
[weakSelf authenticatedPlayer:weakPlayer];
}
else
{
[weakSelf disableGameCenter];
}
};
}
-(void)showAuthenticationDialogWhenReasonable:(UIViewController *)controller
{
[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:controller animated:YES completion:nil];
}
-(void)authenticatedPlayer:(GKLocalPlayer *)player
{
player = _localPlayer;
}
-(void)disableGameCenter
{
}
API差分をお読みください。 –