在 iOS 上匿名进行 Firebase 身份验证

您可以用 Firebase 身份验证功能创建和使用临时匿名帐号来进行 Firebase 身份验证。借助这些临时匿名帐号,尚未注册您应用的用户也可以处理受安全规则保护的数据。如果匿名用户决定注册您的应用,您可以将其登录凭据与其匿名帐号关联,这样他们就可以在以后的会话中继续处理其受保护的数据了。

开始之前

  1. 将 Firebase 添加到您的 iOS 项目
  2. 在您的 Podfile 中添加以下 pod:
    pod 'Firebase/Auth'
    
  3. 如果您尚未将您的应用与 Firebase 项目关联,请在 Firebase 控制台中加以关联。
  4. 启用匿名身份验证:
    1. Firebase 控制台中,打开 Auth(身份验证)部分。
    2. 登录方法页面中,启用匿名登录方法。

匿名进行 Firebase 身份验证

如果已退出帐号的用户要使用需要进行 Firebase 身份验证的应用功能,请完成以下步骤,让用户匿名登录:

  1. UIApplicationDelegate 中导入 Firebase 模块:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. 配置 FirebaseApp 共享实例,通常在应用的 application:didFinishLaunchingWithOptions: 方法中配置:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. 调用 signInAnonymouslyWithCompletion: 方法:

    Swift

    Auth.auth().signInAnonymously() { (authResult, error) in
      // ...
    }
    

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
    
  4. 如果 signInAnonymouslyWithCompletion: 方法顺利完成,未出现任何错误,您可以从 FIRAuthDataResult 对象中获取匿名用户的帐号数据:

    Swift

    let user = authResult.user
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid
    

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;
    

将匿名帐号转成永久帐号

当匿名用户注册您的应用时,您可能需要允许其使用新帐号继续之前的操作。例如,您可能需要将用户在注册之前添加到购物车中的商品移到其新帐号的购物车中。为此,请完成以下步骤:

  1. 当用户注册时,按照用户身份验证提供方的登录流程逐步进行,直到调用某一 FIRAuth.signInWith 方法的前一步时停止。调用的例子包括:获取用户的 Google ID 令牌、Facebook 访问令牌或电子邮件地址和密码。
  2. 获取用于新身份验证提供方服务的 FIRAuthCredential

    Google 登录
    Swift
    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                      accessToken: authentication.accessToken)
    
    Objective-C
    GIDAuthentication *authentication = user.authentication;
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                     accessToken:authentication.accessToken];
    
    Facebook 登录
    Swift
    let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
    
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    
    电子邮件地址/密码登录
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
    
  3. FIRAuthCredential 对象传递给登录用户的 linkWithCredential:completion: 方法:

    Swift
        user.linkAndRetrieveData(with: credential) { (authResult, error) in
      // ...
    }
    }
    
    Objective-C
        [[FIRAuth auth].currentUser linkAndRetrieveDataWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];
    

如果对 linkWithCredential:completion: 的调用成功,用户的新帐号就可以使用匿名帐号的 Firebase 数据。

后续步骤

至此,用户可以进行 Firebase 身份验证,而您也可以使用 Firebase 规则控制用户对您 Firebase 数据库中的数据的访问权限。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面