美文网首页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