我将使用 firebase-messaging
库并尝试在应用启动时使用以下方法获取令牌.
应用程序在启动时崩溃
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'com.google.android.gms.tasks.Task com.google.firebase.iid.FirebaseInstanceId.getInstanceId()'
AndroidManifest
构建.gradle:
实施 'com.google.android.gms:play-services-analytics:16.0.5'实施 'com.google.firebase:firebase-messaging:17.3.4'
另外,我尝试在 SharedPreferences 中缓存令牌,但似乎从未调用过 onNewToken().
@Override公共无效onNewToken(字符串令牌){super.onNewToken(token);SharedPreferences 首选项 = PreferenceManager.getDefaultSharedPreferences(this);SharedPreferences.Editor 编辑器 = preference.edit();editor.putString("TOKEN",token);editor.apply();}
可能是什么问题?
合并清单出现问题,合并清单中缺少以下服务.在 AndroidManifest.xml
中添加了相同的内容,它就像一个魅力.
<service android:name="com.google.firebase.components.ComponentDiscoveryService" ><元数据android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"android:value="com.google.firebase.components.ComponentRegistrar"/></服务>
现在一切正常.
I am to using firebase-messaging
library and trying to fetch the token using below method on app launch.
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(InstanceIdResult instanceIdResult) { String token = instanceIdResult.getToken(); // print token } });
App crashes on the launch itself giving
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.iid.FirebaseInstanceId.getInstanceId()' on a null object reference
AndroidManifest
<service
android:name=".MyFirebaseMessageService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
Build.gradle :
implementation 'com.google.android.gms:play-services-analytics:16.0.5'
implementation 'com.google.firebase:firebase-messaging:17.3.4'
Also, i have tried to cache the token in SharedPreferences but it seems onNewToken() is never called.
@Override
public void onNewToken(String token) {
super.onNewToken(token);
SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preference.edit();
editor.putString("TOKEN",token);
editor.apply();
}
What could be the problem?
There was problem in merged manifest, following service was missing from the merged manifest.
Added same to AndroidManifest.xml
it worked like a charm.
<service android:name="com.google.firebase.components.ComponentDiscoveryService" >
<meta-data
android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
</service>
Everything is working fine now.
这篇关于尝试在空对象引用上调用虚拟方法 com.google.firebase.iid.FirebaseInstanceId.getInstanceId()'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!