android - @react-native-firebase/messaging 错误:找不到符号 FirebaseInstanceId
问题描述
无法在我的 React Native 项目中解决此错误,该项目使用Firebase 云消息传递模块 @react-native-firebase/messaging:
BUILD FAILED in 9s
error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
C:\Users\...\node_modules\@react-native-firebase\messaging\android\src\main\java\io\invertase\firebase\messaging\ReactNativeFirebaseMessagingModule.java:34: error: cannot find symbol
import com.google.firebase.iid.FirebaseInstanceId;
^
symbol: class FirebaseInstanceId
location: package com.google.firebase.iid
C:\Users\...\node_modules\@react-native-firebase\messaging\android\src\main\java\io\invertase\firebase\messaging\ReactNativeFirebaseMessagingModule.java:121: error: cannot find symbol
.call(getExecutor(), () -> FirebaseInstanceId.getInstance().getToken(authorizedEntity, scope))
^
symbol: variable FirebaseInstanceId
location: class ReactNativeFirebaseMessagingModule
C:\Users\...\node_modules\@react-native-firebase\messaging\android\src\main\java\io\invertase\firebase\messaging\ReactNativeFirebaseMessagingModule.java:135: error: cannot find symbol
FirebaseInstanceId.getInstance().deleteToken(authorizedEntity, scope);
^
symbol: variable FirebaseInstanceId
location: class ReactNativeFirebaseMessagingModule
3 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-firebase_messaging:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
试过:
- 不同的 gradle版本 6.9、7.0、7.0.1。
- 不同的谷歌服务版本 4.3.5、4.3.6、4.3.7
- 在 build.gradle 应用程序的顶部和底部应用google-services
- 不同的 gradle 插件版本4.1.3、4.2.0、4.2.1
- 删除并重新安装所有 node_modules
- 每次版本更改后使用gradlew clean清理构建并重新构建
这是我的npm 列表输出:
├── @babel/core@7.14.2
├── @babel/runtime@7.14.0
├── @react-native-community/cli-platform-android@5.0.1-alpha.1
├── @react-native-community/eslint-config@2.0.0
├── @react-native-firebase/analytics@11.5.0
├── @react-native-firebase/app@11.5.0
├── @react-native-firebase/crashlytics@11.5.0
├── @react-native-firebase/functions@11.5.0
├── @react-native-firebase/messaging@11.5.0
├── babel-jest@26.6.3
├── eslint@7.26.0
├── fast-html-parser@1.0.1
├── jest@26.6.3
├── metro-react-native-babel-preset@0.66.0
├── react-native-keep-awake@4.0.0
├── react-native-mmkv-storage@0.5.8
├── react-native-print@0.7.0
├── react-native-sound-player@0.10.8
├── react-native-webview@11.4.4
├── react-native@0.64.1
├── react-test-renderer@17.0.2
├── react@17.0.2
└── util@0.12.3
我正在覆盖最新的 firebase BOM 28.0.1。还尝试了默认的@react-native-firebase 26.8.0 版本,然后应用程序在启动时崩溃,并且在构建或地铁时没有错误输出。应用在 android/app有google-services.json并在 firebase 中注册。目前使用 gradle 6.9、插件 4.1.3 和 google-services 4.3.5。
第一次在 index.js 中使用消息,监听后台推送消息,如https://rnfirebase.io/messaging/usage中的文档所述:
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
import messaging from '@react-native-firebase/messaging';
// Register background handler
messaging().setBackgroundMessageHandler(async (remoteMessage) => {
console.log('Message handled in the background!', remoteMessage);
});
AppRegistry.registerComponent(appName, () => App);
稍后尝试获取设备令牌并调用云功能:
var switchFunction = functions().httpsCallable(toggleFunctionName);
messaging()
.getToken()
.then((token) => {
switchFunction({
organization: encodeURI(parsedLocalData.organizationName),
user_email: encodeURI(parsedLocalData.userMai),
device_token: token,
})
.then((result) => {
// Read result of the Cloud Function.
var sanitizedMessage = result.data.text;
console.log('Firebase: ' + sanitizedMessage);
})
.catch((error) => {
// Getting the Error details.
console.log('Firebase error: ' + error);
});
});
解决方案
将此添加到您app/build.gradle
的依赖项中:
implementation 'com.google.firebase:firebase-messaging:21.1.0'
implementation 'com.google.firebase:firebase-iid'
build.gradle
这是ext {} 下的顶层
firebaseMessagingVersion = "21.1.0"
另外,如果您还没有这样做,请在顶层的依赖项下build.gradle
:
classpath 'com.google.gms:google-services:4.3.8'
最后,在顶部app/build.gradle
:
apply plugin: "com.android.application"
apply plugin: 'com.google.gms.google-services'
推荐阅读
- node.js - Nuxt - 我想导入一些包时出现节点错误
- python - 保存呼叫跟踪器
- node.js - AWS S3-ValidationException:提供的关键元素与架构不匹配
- r - 如何使用 NSE 将列转换为不同的类型?
- reactjs - 如何计算 api 调用的时间
- javascript - 在 ReactJS 中使用 React-List 使用表格进行无限滚动渲染需要太长时间
- perl - Spamassassin 自定义规则不适用于 Outlook 电子邮件
- vue.js - 部署应用程序后的 Vue.js 我需要硬刷新才能看到我所做的更改
- c# - ASP.NET Core Web 通知实现
- javascript - 访问每小时预报数据时出现 OpenWeather API 401 错误