Android React Native Firebase:令牌刷新不工作

Android React Native Firebase:令牌刷新不工作,android,firebase,react-native,react-native-firebase,Android,Firebase,React Native,React Native Firebase,我的react native firebase(或firebase)存在问题,其中我的应用程序在验证令牌刷新后未收到触发器。这与[1]的问题几乎相同,但他们从未发布过解决方案 因此,无论是在Android手机上还是在Android emulator(不知道iOS)上,注册、登录和注销都可以完美地工作,这意味着当我执行logout()等操作时,监听器可以正确地看到。但当令牌刷新时,监听器永远不会触发 我的第一个问题是:假设onIdTokenChanged-侦听器应在60分钟后自动启动,而无需执行任

我的react native firebase(或firebase)存在问题,其中我的应用程序在验证令牌刷新后未收到触发器。这与[1]的问题几乎相同,但他们从未发布过解决方案

因此,无论是在Android手机上还是在Android emulator(不知道iOS)上,注册、登录和注销都可以完美地工作,这意味着当我执行
logout()
等操作时,监听器可以正确地看到。但当令牌刷新时,监听器永远不会触发

我的第一个问题是:假设
onIdTokenChanged
-侦听器应在60分钟后自动启动,而无需执行任何其他操作,例如调用任何firebase函数,使应用程序在那里无所事事60分钟,然后接收事件并替换令牌,这是否正确

包含侦听器的主要组件如下所示:

class ReduxAppWrapper extends Component {

  componentDidMount() {
    firebase.auth().onAuthStateChanged((user) => {
        console.log('COMP DID MOUNT: AUTH STATE CHANGED! ' + JSON.stringify(user));
    });
    firebase.auth().onIdTokenChanged((user) => {
        console.log('COMP DID MOUNT: TOKEN CHANGED! ' + JSON.stringify(user));
    });
    firebase.auth().onUserChanged((user) => {
        console.log('COMP DID MOUNT: USER CHANGED! ' + JSON.stringify(user));
    });
  };

  render() {
    return (
      <ReduxProvider store={store}>
        <MenuProvider>
          <PaperProvider>
            <AppContainer />
          </PaperProvider>
        </MenuProvider>
      </ReduxProvider>);
  }
}
类ReduxAppWrapper扩展组件{
componentDidMount(){
firebase.auth().onAuthStateChanged((用户)=>{
log('COMP-DID-MOUNT:AUTH-STATE-CHANGED!'+JSON.stringify(user));
});
firebase.auth().onIdTokenChanged((用户)=>{
log('COMP-DID-MOUNT:TOKEN-CHANGED!'+JSON.stringify(user));
});
firebase.auth().onUserChanged((用户)=>{
log('COMP-DID-MOUNT:USER-CHANGED!'+JSON.stringify(USER));
});
};
render(){
返回(

对于任何有相同问题的人,我最终要求firebase在每次我需要它的时候都要它。我仍然认为这不应该是必要的,但我不想再花时间分析刷新没有自动工作的原因。所以我在应用程序中所做的是

firebase.auth().currentUser.getIdToken().then((token) => {
  fetch(url, {
    method: 'GET',
    headers: { Authorization: token }
  })
}

“”\_(ツ)_/“

显然,使用getIdToken,Firebase仅在当前令牌过期时调用其服务器以获取新令牌;如果不需要,Firebase不会创建不必要的请求

这是一个非常重要的细节,如果您不知道它,它可能会让您感到困惑,并使您(正确地)假设onIdTokenChanged是一个侦听器,您需要使用它来自动更新令牌


我遇到了同样的问题,你能解决这个问题吗?嗨@JamesGallagher请看下面我的答案谢谢分享你的解决方案,我现在也开始解决这个问题了。Firebase文档令人痛苦和困惑
Returns the current token if it has not expired. Otherwise, this will refresh the token and return a new one.