You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase signInWithRedirect()跳转至localhost而非iOS应用问题求助

解决Ionic+Firebase Auth Facebook登录后Safari跳转异常的问题

嘿,我来帮你捋捋这个Facebook登录跳转的坑!你遇到的情况在混合应用用Firebase Auth做第三方登录时挺常见的——本质是重定向逻辑没有适配iOS原生环境,导致授权后跑到Safari加载本地文件路径,而不是回到App内部。下面给你几个针对性的解决思路,按优先级推荐:

1. 优先改用「原生插件+Firebase Auth凭证登录」方案(最稳定)

signInWithRedirect()是为web应用设计的重定向逻辑,在Ionic混合应用里用它很容易出现跳转混乱的问题。更靠谱的方式是用Cordova的Facebook原生登录插件,拿到授权凭证后再传给Firebase Auth,全程在App内完成,完全不会跳Safari。

步骤:

  • 先安装cordova-plugin-facebook4插件:
    ionic cordova plugin add cordova-plugin-facebook4 --variable APP_ID="你的Facebook App ID" --variable APP_NAME="你的App名称"
    
  • 在AngularJS的登录控制器里写登录逻辑:
    angular.module('testApp').controller('LoginCtrl', ['$scope', '$state', function($scope, $state) {
      $scope.facebookLogin = function() {
        // 调用Facebook原生登录,请求必要权限
        facebookConnectPlugin.login(['public_profile', 'email'], function(response) {
          // 用Facebook的accessToken生成Firebase凭证
          const fbCredential = firebase.auth.FacebookAuthProvider.credential(response.authResponse.accessToken);
          
          // 传入Firebase完成登录
          firebase.auth().signInWithCredential(fbCredential)
            .then(user => {
              console.log('登录成功:', user);
              // 跳转到应用主页
              $state.go('home');
            })
            .catch(error => {
              console.error('Firebase登录失败:', error);
              alert('登录出错,请重试');
            });
        }, function(error) {
          console.error('Facebook授权失败:', error);
          alert('授权被取消或失败');
        });
      };
    }]);
    
  • 别忘了在Facebook开发者平台的iOS配置里,把包名填成Xcode里的Bundle ID,开启「单点登录」,确保权限配置正确。

2. 若坚持用重定向方式,需修正配置并适配InAppBrowser

如果你一定要用signInWithRedirect(),得把授权页面放在InAppBrowser里打开,而不是系统Safari,同时配置正确的回调URL:

关键配置:

  • 在Firebase控制台的「Authentication > 登录方法 > Facebook」里,把重定向URL设置为Firebase的默认回调地址:http://localhost:8080/__/auth/handler
  • 安装cordova-plugin-inappbrowser插件,用来在App内打开授权页面:
    ionic cordova plugin add cordova-plugin-inappbrowser
    
  • 修改登录逻辑,用InAppBrowser打开授权流程,监听回调:
    $scope.facebookLogin = function() {
      const provider = new firebase.auth.FacebookAuthProvider();
      // 触发重定向登录,同时用InAppBrowser打开授权页面
      firebase.auth().signInWithRedirect(provider).then(() => {
        // 在App启动时检查重定向结果(把这段代码放到app.run里更合适)
        firebase.auth().getRedirectResult().then(result => {
          if (result.user) {
            $state.go('home');
          }
        }).catch(error => {
          console.error('获取重定向结果失败:', error);
        });
      });
    };
    
  • 在Xcode的Info.plist里添加URL Types,确保App能捕获回调:
    • 标识符填com.firebase,URL Schemes填Firebase给你的iOS应用的回调Scheme(可以在Firebase控制台的iOS应用配置里找到)

3. 检查核心配置是否匹配

不管用哪种方案,这几个配置一定要对应上:

  • Facebook开发者平台的iOS包名 = Xcode里的Bundle ID
  • Facebook开发者平台的「有效的OAuth重定向URI」包含你用的回调地址(Firebase默认地址或自定义Scheme)
  • Xcode的Info.plist里的URL Schemes包含fb<你的Facebook App ID>(必须以fb开头,后面跟数字ID)

按上面的步骤调整后,应该就能解决跳转异常的问题了,优先推荐第一种原生插件的方案,体验和稳定性都要好很多!

内容的提问来源于stack exchange,提问作者Memphis

火山引擎 最新活动