【问题标题】:Firebase onTokenRefresh() never calledFirebase onTokenRefresh() 从未调用过
【发布时间】:2016-09-11 18:25:04
【问题描述】:

我已阅读有关此问题的其他帖子,但没有一个对我有帮助。我的问题是我从来没有得到令牌。我可以重新安装应用程序,无论如何,它永远不会生成。

我需要做些什么来初始化 Firebase?

这里有一些背景:

我有一个从 Firebase 控制台下载的 google-services.json 文件,存储在 src 目录下。

我已在 Firebase 控制台上输入了我的 debug.keystore SHA 1 指纹。

我的build.gradle 文件中有以下依赖项:

编译'com.google.firebase:firebase-core:9.4.0'
编译 'com.google.firebase:firebase-messaging:9.4.0'

我已按照 Firebase instructions 信守承诺:

MyFirebaseInstanceIdService.java

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";    

    @Override
    public void onTokenRefresh() {
        Log.d(TAG, "on token refresh");
        // Get updated InstanceID token.
        String token = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + token);

        sendRegistrationToServer(token);
    }

    private void sendRegistrationToServer(String token) {
    }
}

我在清单的<application> 标记中有这个:

<service
android:name=".HelperClasses.PushNotifications.MyFirebaseInstanceIdService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

无奈之下,我将这一行添加到我的 MainActivity.java 文件的 onCreate() 方法中:

FirebaseInstanceId.getInstance().getToken();

这只会使应用程序崩溃并出现此错误:

java.lang.RuntimeException:无法启动活动 组件信息{com.mobilenicity.werun/com.mydomain.myapp.Activities.ViewControllers.MainActivity}: java.lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在。

当然,我已经研究过这个错误,但没有一个解决方案对我有帮助。

不知道下一步该去哪里,但我显然错过了一些东西。任何人都可以对此有所了解吗?谢谢。

编辑

这是模块build.gradle文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven {url 'https://oss.sonatype.org/content/repositories/snapshots/'}
    }
}

【问题讨论】:

  • 我认为 google-services.json 文件应该在 app 文件夹中,而不是 src 文件夹中
  • 我认为你是对的。接得好。不幸的是,这似乎并不能解决问题。我会改变我的截图。谢谢!
  • 将 google-services.json 放入正确的文件夹后,您需要重新安装应用程序,因为 onTokenRefresh() 方法仅在第一次运行,即安装应用程序时。
  • 是的,我这样做了。这就是为什么我知道它不起作用。
  • 您的应用程序是否使用多个进程实现?你能发布模块 build.gradle 文件吗?

标签: android firebase firebase-cloud-messaging


【解决方案1】:

我遇到了同样的问题。

首先,我错过了将类路径条目“com.google.gms:google-services:3.0.0”添加到我的根级 build.gradle 文件中。

此外,您还必须在模块 build.gradle 文件的底部添加以下内容:

apply plugin: 'com.google.gms.google-services'

查看 firebase 设置说明:https://firebase.google.com/docs/android/setup#add_firebase_to_your_app

【讨论】:

  • 是的,FCM 需要这个插件。
【解决方案2】:

您是否在设置 firebase 时添加了 json 配置文件?

要将 Firebase 添加到您的应用中,您需要一个 Firebase 项目和一个 您的应用的 Firebase 配置文件。

如果您不这样做,请在 Firebase 控制台中创建一个 Firebase 项目 已经有一个。如果您已有 Google 与您的移动应用关联的项目,请点击导入 Google 项目。 否则,单击创建新项目。

点击将 Firebase 添加到您的 Android 应用,然后按照设置步骤操作。如果 您正在导入现有的 Google 项目,这可能会发生 自动下载配置文件即可。

出现提示时,输入您的应用程序包名称。输入很重要 您的应用正在使用的包名称;这只能在添加时设置 一个应用到您的 Firebase 项目。

最后,您将下载一个 google-services.json 文件。你可以 随时重新下载此文件。 如果您还没有这样做,请将其复制到项目的模块文件夹中,通常是 app/。

【讨论】:

  • 这就是我在我的 OP 屏幕截图中显示的 google-services.json 文件的方式。
  • @Alex:在您自己的回答中,您说您将google-services.json 放在了错误的文件夹中。在我看来,这个答案(如果不是直接点击路径)至少指向正确的方向。
【解决方案3】:

我不确定您的实施,但我确实有另一种我使用过的方法。

我从 Asynctask 调用以下代码来获取 Firebase 令牌:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
Task<GetTokenResult> z1 = user.getToken(false);//true means it force refreshes the token, false means will update only if expired-- token by default expires in an hour
        try {
            Tasks.await(z1);
        } catch (Exception e) {
            e.printStackTrace();
        }
final String z2 = z1.getResult().getToken();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多