清除应用程序缓存后,如何设置Firebase以停止接收云消息?

时间:2019-09-02 07:43:38

标签: android firebase react-native firebase-cloud-messaging react-native-firebase

我不是移动开发人员,但是目前正在使用React本机应用程序,并且在通知方面遇到问题。

注意-使用适用于Android应用程序的Android Firebase SDK或适用于React Native应用程序的React Native Firebase SDK时,会发生这种情况。

在我的项目中,我正在使用React Native Firebase,并具有以下工作流程:

  1. 用户登录到应用程序,并且我们将用户的ID设置为已订阅Firebase消息传递主题1(UserID),因此只能将特定通知发送给该用户。 (我知道我们可以使用firebase.messaging().getToken()并将令牌存储到后端,并使用该令牌向设备发送通知,但是发生了同样的事情)
  2. 用户清除app info-> storage
  3. 中的应用程序缓存和存储
  4. 问题:此设备仍会收到发送到先前订阅的主题的通知。

我知道令牌在以下情况下会发生变化:

  • 该应用程序删除实例ID。
  • 该应用已在新设备上还原
  • 用户卸载/重新安装应用程序
  • 用户清除应用数据。

但是令牌只有在再次打开应用程序时才会更改,直到那时仍会收到先前设置的令牌的通知。

我已经和我的朋友聊天了,他是Android开发人员,他也有同样的问题。

删除Facebook Messenger或WhatsApp application cache后,用户将注销并且不会收到通知-我想实施相同的情况。

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.package.dp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />

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

      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:screenOrientation="userPortrait"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>

      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

      <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_asset_notif" />

      <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/defaultNotificationColor" />

      <service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" />

      <service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService">
        <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
      </service>

    </application>

</manifest>

MainApplication.java

@Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }

1 个答案:

答案 0 :(得分:0)

这很奇怪,因为当我从后端使用过时的FCM令牌发送推送时,我收到FCM状态"NOT_FOUND""PERMISSION_DENIED"错误。 您可以在此处找到有关此错误的更多信息:

https://cloud.google.com/apis/design/errors

我将所有FCM令牌存储在数据库中,并在收到"NOT_FOUND""PERMISSION_DENIED"之类的异常时删除无效的密钥