Firebase onTokenRefresh()从未调用过

时间:2016-09-11 18:25:05

标签: android firebase firebase-cloud-messaging

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

我是否需要做一些初始化Firebase的事情?

以下是一些背景知识:

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

enter image description here

我在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:无法启动活动   ComponentInfo {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/'}
    }
}

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。

首先,我错过了将类路径条目'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

答案 1 :(得分:0)

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

  

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

     

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

     

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

     

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

     

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

答案 2 :(得分:0)

我不确定您的实施情况,但我确实采用了其他可行的方法。

我从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();