Реагировать на собственный дескриптор IOS разрешений для обмена сообщениями FCM - PullRequest
0 голосов
/ 21 февраля 2020

Я интегрировал обмен сообщениями FCM в свое приложение React Native.

В своем компоненте приложения я пытался предоставить разрешения, спрашивая пользователя, принимает ли он уведомления или нет.

Мой вопрос я использую для правильного способа предоставления разрешений?

Я использую asyn c 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 Ответ

1 голос
/ 21 февраля 2020

когда вы спрашиваете разрешение, если использование отклоняет или отменяет запрос, вы можете спросить пользователя, что приложению необходимо это разрешение, и перенаправить его на страницу настроек приложения ;, вы можете проверить, разрешается ли погода при каждом запуске приложения и если нет, перенаправьте их на страницу настроек, так как 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...