当我尝试将 Analytics 与通知一起使用时,Firebase 中没有静态方法 zzUr()
Posted
技术标签:
【中文标题】当我尝试将 Analytics 与通知一起使用时,Firebase 中没有静态方法 zzUr()【英文标题】:No static method zzUr() in Firebase when I try to use Analytics with Notifications 【发布时间】:2016-11-07 05:51:32 【问题描述】:我开始使用 Firebase 云消息传递。
我只有使用通知和分析的指南示例代码。如果我不安装 Analytics 通知工作正常,但是当我在 gradle 中添加 Analytics 时,我在尝试发送通知时收到此错误:
java.lang.NoSuchMethodError: 没有静态方法 zzUr()Landroid/content/Intent;在 Lcom/google/firebase/iid/FirebaseInstanceIdInternalReceiver 类中;或其超类(“com.google.firebase.iid.FirebaseInstanceIdInternalReceiver”的声明出现在 /data/app/com.myapp.newapp-2/base.apk 中)在 com.google.firebase.messaging.FirebaseMessagingService.zzz(来源不明) 在 com.google.firebase.iid.zzb.onStartCommand(未知来源) 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3316) 在 android.app.ActivityThread.access$2200(ActivityThread.java:177) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1547) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5951) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
我已经毕业了:
compile 'com.google.firebase:firebase-messaging:9.0.2'
compile 'com.google.firebase:firebase-core:9.2.0'
我的 MyFirebaseMessagingService:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
// TODO(developer): Handle FCM messages here.
// If the application is in the foreground handle both data and notification messages here.
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
private void sendNotification(String messageBody)
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setVibrate(new long[] 1000, 1000, 1000, 1000, 1000 )
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:(对于希望解决问题的人,同时参考上述最新答案 Play-services 和 firebase 库)
从所有 Play 服务和 Firebase 库的第 15 版开始,版本号遵循语义版本控制方案。
每个匹配 com.google.android.gms:play-services-* 和 com.google.firebase:firebase-* 的 Maven 依赖项不再需要具有相同的版本号才能在构建时正常工作时间和运行时间。
更详细的解释请看这里:announcing new SDK versioning
希望它对使用最新 SDK 版本的人们有所帮助。
对于尚未迁移到 AndroidX 并尝试将其 Firebase 和 Play 服务基础 SDK 更新到最新版本 17.0.0 的人,请参阅以下内容:June17,2019 release notes
现在让您知道我为解决我的问题所做的工作是使依赖项如下:
应用无法使用以下库:
implementation 'com.google.firebase:firebase-core:16.0.9' implementation 'com.google.firebase:firebase-messaging:18.0.0' implementation 'com.google.firebase:firebase-analytics:16.5.0'
应用程序与以下内容一起使用:
implementation 'com.google.android.gms:play-services-base:16.1.0' implementation 'com.google.android.gms:play-services-location:16.0.0' implementation 'com.google.android.gms:play-services-analytics:16.0.8' implementation 'com.google.android.gms:play-services-ads:17.2.1' implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.3' implementation 'com.google.firebase:firebase-analytics:16.4.0'
所以基本上我降低了我的 firebase-messaging 版本以及分析,它就像一个魅力......
【讨论】:
【参考方案2】:保持您正在使用的所有 firebase tools 的相同版本...
【讨论】:
【参考方案3】:对我来说,这是可行的。我更改了版本。
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.firebase:firebase-core:9.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
【讨论】:
【参考方案4】:我遇到了同样的问题,因为其他人说我对所有 firebase
库使用了相同的版本,但它没有用:
compile 'com.google.firebase:firebase-core:9.6.0'
compile 'com.google.firebase:firebase-messaging:9.6.0'
我发现play-services
必须使用相同的版本:
compile 'com.google.android.gms:play-services-analytics:9.6.0'
compile 'com.google.android.gms:play-services-base:9.6.0'
compile 'com.google.android.gms:play-services-gcm:9.6.0'
【讨论】:
【参考方案5】:尝试在 build.gradle 中更改 Firebase 版本。它对我有用!
版本必须相同:
compile 'com.google.firebase:firebase-analytics:9.2.0'
compile 'com.google.firebase:firebase-messaging:9.2.0'
compile 'com.google.firebase:firebase-core:9.2.0'
【讨论】:
【参考方案6】:不支持使用不同版本的 Firebase 或 Google Play 服务库。所有库都被一起保护,因此内部方法/类的名称在不同的库之间匹配。当您使用来自不同版本的库时,您可能会看到缺少的类和方法(就像您在本例中所做的那样)。也未测试混合来自不同版本的库。即使您碰巧成功运行了该应用程序,也很可能无法按设计运行。
请始终使用来自完全相同发行版本的库。
【讨论】:
【参考方案7】:试试这个:
添加
compile 'com.google.firebase:firebase-analytics:9.2.0'
然后改变这个:
compile 'com.google.firebase:firebase-messaging:9.0.2'
到这个(所有版本相同)
compile 'com.google.firebase:firebase-messaging:9.2.0'
如果这不起作用,请将所有 firebase 版本设置为 9.0.2 或 9.0.0
【讨论】:
嗨丹尼尔,是的,出于某种原因,我必须使用相同的版本。它有效!以上是关于当我尝试将 Analytics 与通知一起使用时,Firebase 中没有静态方法 zzUr()的主要内容,如果未能解决你的问题,请参考以下文章
将 Electron 与 Google Analytics 嵌入 API 一起使用
将 Firebase Analytics 与命名的 FirebaseApp 一起使用
我们如何将 Firebase Analytics 与基于 expo 的 react-native 应用程序一起使用
Flutter - 无法将 MethodChannel 与 Firebase onBackgroundMessage 一起使用