FireBase之iOS接入电子邮件登录

1.电子邮件账户密码登录方式:

  • 发起登录请求:

        [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                    NSError * _Nullable error) {
          }];
    
  • 注册:

    [[FIRAuth auth] createUserWithEmail:email
                           password:password
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
    
    }];
    
  • 退出登录:

        NSError *signOutError;
        BOOL status = [[FIRAuth auth] signOut:&signOutError];
        if (!status) {
            NSLog(@"Error signing out: %@", signOutError);
            return;
        }
    

2.电子邮件链接无密码登录

原理是当用户发起电子邮件无密码登录时,FaseBase向用户邮箱发送一份带有身份认证的动态链接邮件,用户在邮箱中点击邮件中的认证链接后,认证链接会跳转到当前应用,客户端在appledegate方法中拦截到跳转的认证链接,并且拿到这个链接和邮件账户向FireBase发起身份认证,由于在这个认证过程中,不需要用户输入登录密码仅需要用户的电子邮箱,所以称之为电子邮件链接无密码登录

1.代理拦截认证链接

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring> > *_Nullable))restorationHandler {
   
   if ([userActivity.activityType isEqualToString:@"NSUserActivityTypeBrowsingWeb"]) {
       [self sendEmailToLogin:userActivity.webpageURL.absoluteString];
       return YES;
   }
   return NO;
}

2.发起认证

- (void)sendEmailToLogin:(NSString *)linkString{

   FIRUser *userInfo = [FIRAuth auth].currentUser;
   if (userInfo) {
       NSLog(@"当前用户处于登录状态:%@",userInfo.providerData.firstObject.uid);
   }
   
   if ([[FIRAuth auth] isSignInWithEmailLink:linkString]) {
       [[FIRAuth auth] signInWithEmail:@"邮箱地址"
                                  link:linkString
                            completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
         // ...
           [NSUserDefaults.standardUserDefaults setObject:linkString forKey:@"Link"];
       }];
   }
   
}

1.要完成上面的账户密码身份认证和电子邮件无密码登录认证,需要对FireBase控制台身份认证(Authentication)功能模块中开启电子邮件账户密码登录功能。
2.对于认证动态链接中包含的域名,需要在身份认证模块(Authentication)下的授权网域中进行授权。
3.在Dynamic Links(动态链接)中配置跳转链接
  • 动态链接配置,首先需要一个网址前缀,格式为: example.page.link, example一般是你的app的项目名称。

  • 然后配置动态的链接(以http://或者https://开头),指定指定跳转到目标页面

  • 指定该链接打开方式是在浏览器中打开还是在app中打开

4.注意,如果链接需要在app中打开,那么必须要进行如下配置,否则不能打开App:

1.在FireBase控制台项目设置中,必须配置:

  • 软件包名称(bundle ID)
  • 团队ID(team ID)这个需要去苹果开发者后台证书配置的地方去获取
  • App Store ID ,主要是针对于未安装App的用户,需要引导用户跳转到App store中去下载app

bundle ID和team ID是认证链接能够跳转打开App必须要配置的参数

2.检查配置是否正确可以通过打开以下网址确认:

https://your_dynamic_links_domain/apple-app-site-association
这里的your_dynamic_links_domain就是之前我们配置动态链接时创建的网址前缀example.page.link

如果返回结果为:

{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

并且details不为空,则说明配置正确。

5.xcode的配置,在xcode中,需要在signing & capabilities功能中新增关联域名模块(Associated Domains)域名格式必须以applinks开头再加上我们配置动态链接时的网址前缀,格式如下:
    applinks:example.page.link
6.其次还需要在苹果开发者的证书配置中让App支持关联域名(Associated Domains)功能才能支持跳转。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容