【问题标题】:React Native app crashes when calling .getToken() on @react-native-firebase/messaging在 @react-native-firebase/messaging 上调用 .getToken() 时,React Native 应用程序崩溃
【发布时间】:2021-05-16 08:09:59
【问题描述】:

我正在使用 react native cli 开发一个裸 react native 应用程序。

我最近集成了 firebase 并安装了 @react-native-firebase/messaging。

当调用消息的.getToken()

import messaging from '@react-native-firebase/messaging';
await messaging().getToken() <------------ CAUSING APP TO CLOSE

每次我添加此行时,应用程序都会在没有任何警告和日志的情况下关闭,当我评论该行时不会发生这种情况

这是我的 AndroidManifest.XML

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:roundIcon="@mipmap/ic_launcher_round"
  android:allowBackup="false"
  android:theme="@style/AppTheme">

  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
    android:launchMode="singleTask"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
        <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-9772207663610474XXXXXXXXXX"/>
  <meta-data 
        android:name="com.dieam.reactnativepushnotification.notification_foreground"
        android:value="false"/>
    <!-- Change the resource name to your App's accent color - or any other color you want -->
  <meta-data  
        android:name="com.dieam.reactnativepushnotification.notification_color"
        android:resource="@color/white"/> <!-- or @android:color/{name} to use a standard color -->
                <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions" />
    <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
    <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
        <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"/>
        </intent-filter>
    </receiver>
</application>

这是 Android/build.gradle

   buildscript {
   ext {
    buildToolsVersion = "29.0.3"
    minSdkVersion = 21
    compileSdkVersion = 29
    targetSdkVersion = 29
    ndkVersion = "20.1.5948944"  
    googlePlayServicesVersion = "+"
    firebaseVersion = "+"
    firebaseMessagingVersion = "+"
}
    repositories {
    google()
    jcenter()
}
    dependencies {
    classpath("com.android.tools.build:gradle:4.1.0")
    classpath 'com.google.gms:google-services:4.3.3'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}}
    allprojects {
    repositories {
    mavenLocal()
    maven {
        // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
        url("$rootDir/../node_modules/react-native/android")
    }
    maven {
        // Android JSC is installed from npm
        url("$rootDir/../node_modules/jsc-android/dist")
    }

    google()
    jcenter()
    maven { url 'https://www.jitpack.io' }
}}

【问题讨论】:

  • 发生在模拟器中?
  • 这发生在安卓设备上,通过usb调试。
  • 试过我在回答中给出的许可吗?
  • @Pulkitsaini 你是怎么解决的?

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


【解决方案1】:

您是否将此行添加到您的 Android/app/build.gradle 中?

implementation platform(‘com.google.firebase:firebase-bom:28.0.1’)

如果您这样做了,请尝试将其删除、清理、重建并再次运行该项目。

【讨论】:

    【解决方案2】:
    firebaseMessagingVersion = "21.1.0"
    

    解决我的问题。

    【讨论】:

      【解决方案3】:

      package.json 中更新到"@react-native-firebase/messaging": "^11.5.0" 并在buildscript.extbuildscript.ext 中更改firebaseMessagingVersion = "21.1.0" 为我解决了这个问题。

      【讨论】:

        【解决方案4】:

        在执行此行之前检查消息传递权限。

        _checkPermission = async() => {
            const enabled = await firebase.messaging().hasPermission();
            if (enabled) {
                const device = await firebase.messaging().getToken()
                console.warn(device)
            }
            else this._getPermission() 
        } 
        
        _getPermission = async() => {
            firebase.messaging().requestPermission()
            .then(() => {
                this._checkPermission()
            })
            .catch(error => {
                // User has rejected permissions  
            });
        } 
        

        【讨论】:

        • 我之前试过,现在又试了,还是一样。
        • 这是在你的 android 中吗?
        • 刚刚将它添加到我的AndroidManifest.XML,重新运行-> npx react-native run-android,但仍然是同样的问题
        猜你喜欢
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 2018-02-17
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多