簡體   English   中英

@react-native-firebase/messaging 沒有在真正的 ios 設備中獲取設備令牌

[英]@react-native-firebase/messaging not getting device token in real ios device

我正在使用 react-native-firebase v8 和 react-native v0.61.2。 我最近將我的 react-native 版本從 0.61 升級到 0.61.2。 在 android 中一切正常,但在 ios 中真實設備messaging.getToken() 在 catch 塊中拋出錯誤,沒有獲得任何令牌。

錯誤:

在此處輸入圖像描述

我的 FCM 服務文件

class FcmService {

register = (onRegister,onNotification, onOpenNotification) =>{
    this.checkPermission(onRegister)
    // when register function call that time we create notification listener
    this.createNoitificationListeners(onRegister, onNotification, onOpenNotification)
}

registerAppWithFCM = async () => {
    if(Platform.OS === 'ios') {
        await messaging().registerDeviceForRemoteMessages();
        await messaging().setAutoInitEnabled(true);
    }
}

checkPermission = (onRegister) => {
    messaging().hasPermission()
        .then(enabled  => {
            if (enabled) {
                Alert.alert('enabled')
                //user has permission
                this.getToken(onRegister)
            } else {
                //user don't have permission
                this.requestPermission(onRegister)
            }
        }).catch(error => {
            let err = `check permission error${error}`
            Alert.alert(err)
        // console.log("[FCMService] Permission rejected", error)
    })
}

getToken = async (onRegister) => {
    let fcmToken = await AsyncStorage.getItem(Constants.FCM_TOKEN);
    if(!fcmToken) {
        messaging().getToken()
        .then(fcmToken => {
            Alert.alert(fcmToken)
            if (fcmToken) {
                onRegister(fcmToken)
            } else {
                // console.log("[FCMService] User does not have a device token")
            }
        }).catch(error => {
            let err = `FCm token get error${error}`
            Alert.alert(err)
        // console.log("[FCMService] getToken rejected ", error)
    })
    }
    else {

    }
}

requestPermission = (onRegister) => {
    messaging().requestPermission().then(() => {
        this.getToken(onRegister)
    }).catch(error => {
        // console.log("[FCMService] Requested persmission rejected ", error)
    })
}

deletedToken = async () => {
    await messaging().deleteToken()
        .catch(error => {
            // console.log("Delected token error ", error)
        })
}

createNoitificationListeners = (onRegister, onNotification, onOpenNotification) => {

    messaging().onNotificationOpenedApp(remoteMessage => {
        Alert.alert(remoteMessage)
        // console.log("[FCMService] onNotificationOpenedApp Notification caused app to open from background state:", remoteMessage);
        if(remoteMessage) {
            onOpenNotification(remoteMessage)
        }
    });

    // when the application is opened form a quit state
    messaging()
        .getInitialNotification()
        .then(remoteMessage => {
            Alert.alert(remoteMessage)
            // console.log('[FCMService] getInitialNotification Notification caused app to open from quit state:', remoteMessage);
            if (remoteMessage) {
                onOpenNotification(remoteMessage)
            }
        }
    );

    // Foreground state messages
    this.messageListener = messaging().onMessage(async remoteMessage => {
        Alert.alert(remoteMessage)
         //console.log("[FCMService] A new FCM message arrived", remoteMessage);
        if(remoteMessage) {
            let notification = null;
            if(Platform.OS === 'ios') {
                notification = remoteMessage
            } else {
                notification = remoteMessage
            }
            onNotification(notification);
        }
    });

    // Triggered when have new token
    messaging().onTokenRefresh(fcmToken => {
        // console.log("New token refresh: ", fcmToken)
        onRegister(fcmToken)
    })

}

unRegister = () => {
    this.messageListener()
}

}

App.js文件中我調用了那個方法

fcmService.registerAppWithFCM();
fcmService.register(this.onRegister, this.onNotification, this.onOpenNotification);

您必須使用社區/推送通知 ios 依賴項並請求許可。 使用它我能夠解決這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM