尝试在空对象引用上调用虚拟方法com.google.firebase.iid.FirebaseInstanceId.getInstanceId()'

时间:2018-12-09 12:54:54

标签: android firebase firebase-cloud-messaging

我要使用list.setEditable(true)库,并尝试在应用启动时使用以下方法获取令牌。

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener() {
           @Override
           public void onSuccess(InstanceIdResult instanceIdResult) {
               String token = instanceIdResult.getToken();
               // print token
           }
       });

应用在投放时崩溃,导致

firebase-messaging

AndroidManifest

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

Build.gradle:

<service
      android:name=".MyFirebaseMessageService">
      <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
      </intent-filter>
</service>

此外,我尝试将令牌存储在SharedPreferences中,但似乎从未调用过onNewToken()。

implementation 'com.google.android.gms:play-services-analytics:16.0.5'
implementation 'com.google.firebase:firebase-messaging:17.3.4'

可能是什么问题?

3 个答案:

答案 0 :(得分:3)

合并清单中存在问题,合并清单中缺少以下服务。 在AndroidManifest.xml中添加了相同内容,就像是一种魅力。

 <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>

现在一切正常。

答案 1 :(得分:0)

在将.aar清单与主应用清单合并时,我遇到了相同的问题,正如@alphaguy提到的,合并清单后缺少组件,并且在添加以下服务时提到错误消失了:

<service
        android:name="com.google.firebase.components.ComponentDiscoveryService"
        android:exported="false" >
        <meta-data
            android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
            android:value="com.google.firebase.components.ComponentRegistrar" />
        <meta-data
            android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar"
            android:value="com.google.firebase.components.ComponentRegistrar" />
    </service>

但是Firebase Messaging仍然无法正常工作,因为接收到FirebaseInstanceId和FirebaseMessaging事件并将其传递到特定于应用程序的FirebaseInstanceIdService的WakefulBroadcastReceiver也丢失了,该接收器会通过manifest merge自动添加到您应用程序的清单文件中,在本例中是丢失在合并中,因此我们需要手动添加它,如下所示:

<receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:exported="false"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </receiver>

FirbaseInstanceIdReceiver文档:https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceIdReceiver

  • 注意:您可能需要在FirebaseApp.initializeApp(this);的{​​{1}}处添加onCreate

    ApplicationClass

答案 2 :(得分:0)

您需要添加以下软件包,

  1. Xamarin.Firebase.Lid
  2. Xamarin.Firebase.Messaging
  3. Xamarin.Firebase.Common

可选-Xamarin.Firebase.Analytics(用于分析)