编写苹果游戏中心应用程序(翻译 1.5 在游戏中心验证本地玩家)

 

1.5 在游戏中心验证本地玩家

问题

    你知道使用游戏中心功能的第一步是验证本地玩家,但你不知道如何去做。

解决方案

    使用GKLocalPlayer类的authenticateWithCompletionHandler:实例方法。

讨论

    在游戏中心,每件事都依赖于访问本地玩家这个简单的能力。本地玩家通过iOS设备上的游戏中心应用程序或使用了游戏中心的iOS应用程序验证进入游戏中心。

    如果玩家自己还没有通过验证,则试图获取本地玩家时,会首先提示玩家进行验证。如果玩家取消,我们在代码中将收到一个错误。如果玩家已经验证通过,就不会有提示;并且我们可以获得他的玩家对象。

    游戏中心的每个玩家都用GKPlayer对象表示。本地玩家也是一个玩家,不过但使用GKLocalPlayer类型的对象表示。它是GKPlayer的子类。为取得本地玩家对象的引用,你可以使用GKLocalPlayer的类方法localPlayer,象下面这样:

        GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

    拥有本地玩家对象后,你必须,只要你有能力这样做(就在应用程序加载后),使用GKLocalPlayer类的实例方法authenticateWithCompletionHandler:验证玩家。该方法接受一个块对象(该块对象不能有返回值,还应当接受单独的一个NSError类型的参数;该参数将保存验证过程中发生的任何错误):

        - (void) authenticateLocalPlayer{

            GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

            [localPlayer authenticateWithCompletionHandler:^(NSError *error) {

                if (error == nil){
                    NSLog(@"Successfully authenticated the local player.");
                } else {
                    NSLog(@"Failed to authenticate the player with error = %@", error);
                }
            }];
        }

    如果玩家还没有登录到游戏中心,则在该代码执行后,会被弹出对话框提示要求登录,如图1-8所示。


图 1-8 游戏中心,要求本地玩家登录

    如果本地玩家已经通过验证,GKLocalPlayer类的实例方法isAuthenticated将返回YES,否则返回NO。因此,为提高验证的方法,我们可以把它添加到代码中:

       - (void) authenticateLocalPlayer{

         GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

          if ([localPlayer isAuthenticated] == YES){
            NSLog(@"The local player has already authenticated.");
            return;
         }

         [localPlayer authenticateWithCompletionHandler:^(NSError *error) {
            if (error == nil){
               NSLog(@"Successfully authenticated the local player.");
            } else {
               NSLog(@"Failed to authenticate the player with error = %@", error);
            }
         }];
      }

    我们调用GKLocalPlayer类的实例方法isAuthenticated以避免对玩家的一遍又一遍的验证。没有这个检查也不会骚扰到玩家(如果他已经登录到游戏中心的话)。但作这个检查可以节省对游戏中心的过度调用。

    现在,知道了如何验证本地玩家,是时候开始游戏中心中更加复杂的主题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值