我知道还有其他一些类似于我的帖子,但是我已经通过了解决方案列表而没有结果。我的Android应用程序有一个非常简单的firebase实现,它应该在启动时检索令牌并通过回调将其传递给主活动以供以后使用。我听说该令牌应该是在启动时生成的,但是在第一次安装应用程序时,我从未收到它并且我的应用程序崩溃了。如果我再次安装我的应用程序(不先删除它),一切正常,我得到我的令牌。
我试过了:
在第一次安装期间查看我的logcat,我得到了这两个firebase错误:
E/FA: Discarding data. Failed to send app launch
E/FA: Failed to get app instance id
我的InstanceIdService:
public class InstanceIDService extends FirebaseInstanceIdService {
TokenCallback callback;
public void initInstanceIDService(TokenCallback cb) {
this.callback = cb;
}
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
// Get updated token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
if (refreshedToken != null) {
callback.onTokenReceived(refreshedToken);
}
//pass token to manager for use during authentication
Log.d("Firebase", "Refreshed token: " + refreshedToken);
}
public interface TokenCallback {
void onTokenReceived(String token);
}
}
我的宣言:
<service
android:name="com.projectname.network.MessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name="com.projectname.network.InstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
My Gradle依赖项:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.firebase:firebase-core:11.0.4'
compile 'com.google.firebase:firebase-messaging:11.0.4'
compile 'com.android.support:appcompat-v7:+'
}
apply plugin: 'com.google.gms.google-services'
我在物理设备上进行测试,并且都返回相同的行为。
如果有人有过这个问题的经验,我们将非常感谢任何建议或解决方案。
答案 0 :(得分:1)
当设备或模拟器运行的旧版Google Play服务与所使用的Firebase库版本不兼容时,可能会出现此问题。当存在这种情况时,logcat将包含此警告消息:
W/GooglePlayServicesUtil: Google Play services out of date. Requires XXXXXXXX but found XXXXXXXX
解决方案是更新Google Play服务,或降级Firebase版本。
由于Firebase API需要兼容版本的Google Play服务,因此在应用初始化期间使用GoogleApiAvailability确认是否存在兼容版本是一种很好的做法。