1

我的應用程序僅在應用程序打開並且處於後臺時纔會收到通知。但我需要通知應達到甚至應用程序已關閉。我如何在reactnative中使用react-native-fcm來做到這一點?React-native-fcm不推送已關閉應用程序的通知

我的代碼低於請參考它

FCM.getInitialNotification().then(notif=>console.log(notif)); 
      FCM.requestPermissions(); // for iOS 
      FCM.getFCMToken().then(token => { 
       console.log(token) 
       // store fcm token in your server 
      }); 
      this.notificationListener = FCM.on(FCMEvent.Notification, async (notif) => { 
       // there are two parts of notif. notif.notification contains the notification payload, notif.data contains data payload 
       if(notif.local_notification){ 
        //this is a local notification 
        return; 
       } 
       if(notif.opened_from_tray){ 
        //app is open/resumed because user clicked banner 
        console.log('clicked'); 

        return; 
       } 
       this.showLocalNotification(notif); 

      }); 
      this.refreshTokenListener = FCM.on(FCMEvent.RefreshToken, (token) => { 
       console.log(token) 
       // fcm token may not be available on first load, catch it here 
      }); 

     showLocalNotification(notif) { 
      FCM.presentLocalNotification({ 
      title: notif.title, 
      body: notif.body, 
      priority: "high", 
      click_action: notif.click_action, 
      show_in_foreground: true, 
      local: true 
      }); 
     } 

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="22" /> 

    <application 
     android:name=".MainApplication" 
     android:allowBackup="true" 
     android:label="@string/app_name" 
     android:icon="@mipmap/ic_launcher" 
     android:theme="@style/AppTheme"> 

     <receiver android:name="com.evollu.react.fcm.FIRLocalMessagingPublisher"/> 
     <receiver android:enabled="true" android:exported="true" android:name="com.evollu.react.fcm.FIRSystemBootEventReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON"/> 
      <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     </receiver> 

     <service android:name="com.evollu.react.fcm.MessagingService" android:enabled="true" android:exported="true"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
     </intent-filter> 
     </service> 

     <service android:name="com.evollu.react.fcm.InstanceIdService" android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
     </intent-filter> 
     </service> 

     <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
     android:windowSoftInputMode="adjustResize"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="fcm.ACTION.HELLO" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     </activity> 
     <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> 
     <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="XXXXXX"/> 
    </application> 
+0

你有沒有考慮過使用'data'- * only * payload消息? –

+0

我正在發送數據和通知。我是新來的。我只是使用react-native-fcm來滿足我的需求。 –

+0

對不起。我很困惑。我認爲當應用處於前景/背景時,您更願意自己處理這些消息。這是Android的行爲,當通過'data'和'notification'發送一個有效載荷時,Notification Tray將處理有效載荷。你沒有看到任何通知?你有沒有在多個設備上測試過? –

回答

3

你的問題是你如何推動您的通知。 FCM將識別並彈出僅包含屬性「通知」的通知。

如果您需要的命令

this.showLocalNotification(通知符);

要顯示您的通知,這意味着您正在本地管理通知,因此,您關閉的應用程序將無法管理它。

因此,請檢查您是如何將通知發送到雲端的,並確保只有在您沒有「通知」屬性時纔會觸發事件「FCMEvent.Notification」。

例:

noteA = {notification: {title: "Notification Title", body:"Notification body"}, data: {optional: "content"}}; 
noteB = {title: "Notification Title", body:"Notification body"}, data: {optional: "content"}}; 

結果:

注意事項】:應該彈出一個通知,而不觸發FCMEvent.Notification

noteB:應該觸發FCMEvent.Notification並且如果this.showLocalNotification(通知符)是將顯示調用本地通知。