【问题标题】:Getting Firebase Cloud Messaging token in React Native在 React Native 中获取 Firebase 云消息传递令牌
【发布时间】:2021-02-18 09:58:48
【问题描述】:

我是本机反应的新手,我正在尝试创建一个具有后台通知的应用程序。在做了一些研究之后,我觉得最好的方法是使用 Firebase 云消息传递。

在学习了许多不同的教程后,我编写了以下代码。

export default class App extends React.Component { 
  requestUserPermission = async () => {
    const authStatus = await messaging().requestPermission();
    const enabled =
      authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
      authStatus === messaging.AuthorizationStatus.PROVISIONAL;
      if (enabled) {
        getFcmToken();
        console.log('Authorization status:', authStatus);
      }
    };

    getFcmToken = async () => {
      const fcmToken = await messaging().getToken();
      if (fcmToken) {
          console.log(fcmToken);
          console.log("Your Firebase Token is:", fcmToken);
      } else {
          console.log("Failed", "No Token Recived");
      }
    };

    async componentDidMount() {
      await this.requestUserPermission();

       // Register background handler
       messaging().setBackgroundMessageHandler(async (remoteMessage) => {
       console.log('Messaage handled in the background!', remoteMessage);
  });
};
  }

当我在我的 iOS 设备上运行我的应用程序时,我可以在终端中看到我收到以下错误。

ReferenceError:找不到变量:getFcmToken

当我尝试发送测试消息时,它似乎没有出现。

我的问题是:我是写错了代码还是做错了什么?

【问题讨论】:

    标签: javascript ios firebase react-native firebase-cloud-messaging


    【解决方案1】:

    在实际使用之前声明getFcmToken

        // declare getFcmToken first
        const getFcmToken = async () => {
          const fcmToken = await messaging().getToken();
          if (fcmToken) {
              console.log(fcmToken);
              console.log("Your Firebase Token is:", fcmToken);
          } else {
              console.log("Failed", "No Token Recived");
          }
        };
    
        // then use it
        const authStatus = await messaging().requestPermission();
        const enabled =
          authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
          authStatus === messaging.AuthorizationStatus.PROVISIONAL;
          if (enabled) {
            getFcmToken();
            console.log('Authorization status:', authStatus);
          }
        };
    

    【讨论】:

    • 这是我本来想做的,但似乎会导致语法错误
    • 一旦我将令牌功能放在应用程序组件之外,我似乎就可以工作了。感谢您的帮助
    猜你喜欢
    • 2022-08-19
    • 2018-06-25
    • 2022-12-03
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2017-07-04
    相关资源
    最近更新 更多