美文网首页iOS面试题iOS 学习
iOS Game Center 登陆验证

iOS Game Center 登陆验证

作者: 后浪普拉斯 | 来源:发表于2018-10-24 10:37 被阅读19次

简介

Game Center所有操作都是针对的本地的用户(local player),所以需要启动的时候验证用户。

验证用户

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    //验证game center 是否登录
    //viewController是否为nil是设置中gamecenter是否开关,关闭不为nil,打开为nil
    //error 为nil,[[GKLocalPlayer localPlayer] isAuthenticated]为YES,验证成功
    localPlayer.authenticateHandler = ^(UIViewController * _Nullable viewController, NSError * _Nullable error) {
        NSLog(@"已经授权1,playerID : %@", [GKLocalPlayer localPlayer].playerID);
        if ([[GKLocalPlayer localPlayer] isAuthenticated]) {
            NSLog(@"已经授权2,playerID : %@", [GKLocalPlayer localPlayer].playerID);
            self.succBlock([GKLocalPlayer localPlayer].playerID);
        }else if(viewController){
            [VC presentViewController:viewController animated:NO completion:nil];
        }
        else{
            if (!error) {
                NSLog(@"授权完成");
            }else{
                NSLog(@"取消授权");
                NSLog(@"AuthPlayer error: %@", [error localizedDescription]);
            }
        }
    };

注意的问题:

Game center 通过上面的方法验证,这个其中最重要的就是block中的viewcontroller和error,这两个参数是对这个登陆框的一些操作和状态的显示。


  1. viewController 是判断我们在系统设置中是否将Game Center 打开,没打开此时viewController 是有值的,打开了了是没有值的(这里其实就是我们是否在系统中登陆过game center账号)。
    viewController 不为nil的情况:


    image.png

    viewController 为 nil的情况:


    image.png
  2. error 假如为nil,[[GKLocalPlayer localPlayer] isAuthenticated] = YES,此时验证通过。也就是说验证通过的时候viewController = nil, error = nil, [[GKLocalPlayer localPlayer] isAuthenticated] = YES。

  3. 说一下验证的block,block 只能在进入游戏的时候被第一次调起,之后我们在调用这个方法的时候就已经不能在调起这个block验证了,只能是系统自己调起这个block验证。


流程


1、当游戏进入的时候,我们可以主动调起验证block,假如验证通过,此时会看到上方出现横幅,说已经登陆。
2、当我们的游戏进入后台再进入前台,此时会自动调起block 验证,我们每一次从后台进入前台都会自动调用验证过程
3、我们在游戏中,切到后台将Game Center 关闭,再回到前台调用block 验证的时候,此时viewController 是 nil ,而且此时的error也是nil。假如你再次进入后台再进入前台的时候,此时viewController 不为nil,error为nil,此时就会弹出Game Center的登陆框。(viewController != nil, error = nil, [[GKLocalPlayer localPlayer] isAuthenticated] = NO)


image.png

4、上面,我们弹出登陆框,需要用户登录Game center 的时候,假如用户点击cancel 按钮,此时验证失败,(viewController = nil, error != nil, [[GKLocalPlayer localPlayer] isAuthenticated] = NO),此时有错误码,验证失败,(一个游戏的GameCenter登陆假如连续取消3次,当我们后台没有登陆需要验证的时候也不会再出现上面的验证界面)。
5、假如游戏进行中,我们切到后台之后,切换了GameCenter 账号,此时回调block验证之后,验证成功之后会在上面弹出用户已登陆的横幅,此时的Game Center账户的playerId已经修改.(每个Game Center 的账户的playerId对每个应用都是一样的 )。

相关文章

网友评论

    本文标题:iOS Game Center 登陆验证

    本文链接:https://www.haomeiwen.com/subject/zwrttqtx.html