React Native 处理 FCM 消息传递的 IOS 权限

Posted

技术标签:

【中文标题】React Native 处理 FCM 消息传递的 IOS 权限【英文标题】:React Native handle IOS permissions for FCM messaging 【发布时间】:2020-06-05 17:03:41 【问题描述】:

我将 FCM 消息集成到我的 React Native 应用程序中。

在我的 App 组件中,我尝试通过询问用户是否接受接收通知来授予权限。

我的问题是,我是否使用正确的方式来授予权限?

我使用 async componentDidMount 来实现函数 requestPermission :

import firebase from '@react-native-firebase/app'
import messaging from '@react-native-firebase/messaging'

async componentDidMount () 
 // ......
    const granted = messaging().requestPermission()
    if (granted) 
  console.log('User granted messaging permissions!')
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  firebase
    .messaging()
    .getToken()
    .then(fcmToken => 
      if (fcmToken) 
        // user has a device token
        console.log('fcm')
        console.log(fcmToken)
       else 
        // user doesn't have a device token yet
        console.log('error')
      
    )
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
 else 
  console.log('User declined messaging permissions :(')



I get the FCM generated token, and i can send message using Postman to the device using this token. How can i be sure that the permissions are always granted and i can get the token from every device ? 

【问题讨论】:

【参考方案1】:

当您请求许可时,如果用户拒绝或取消请求,您可以询问用户应用需要该许可并将他重定向到应用设置页面,,, 您可以检查每次启动应用程序时是否授予天气权限,如果没有将它们重定向到设置页面,因为如果用户拒绝它,ios 只会询问一次权限,因此不会再次询问权限.. 这是检查和请求权限的示例代码

 firebase
      .messaging()
      .hasPermission()
      .then(enabled =>        
        if (enabled) 
          setNotification();
          onNotification();
         else 
          firebase
            .messaging()
            .requestPermission()
            .then()
            .catch(err => 
              if (!isandroid) 
                Linking.canOpenURL('app-settings:')
                  .then(supported => 
                    Linking.openURL('app-settings:');
                  )
                  .catch(error => );
              
            );
       
     )
.catch();

【讨论】:

我如何实现函数 setNotification 和 onNotification ?我正在使用 import firebase from '@react-native-firebase/app' import messages from '@react-native-firebase/messaging' 我找不到这两个函数 目前在 react native firebase v6 中没有通知,所以如果你需要在你的应用中通知你需要降级到 v5

以上是关于React Native 处理 FCM 消息传递的 IOS 权限的主要内容,如果未能解决你的问题,请参考以下文章

React-Native - Firebase 云消息传递 - 如果从托盘打开则没有事件

用户注销 React Native 应用程序时如何删除 Firebase 云消息传递令牌?

使用 Expo react native (android) 收听 FCM 推送通知传递

使用 react-native-firebase 在 Android 中关闭应用程序时未收到 fcm 消息

react-native-fcm点击托盘通知后如何在特定页面上重定向

React Native Firebase 6 云消息传递和推送通知