【问题标题】:Attempt to invoke virtual method com.google.firebase.iid.FirebaseInstanceId.getInstanceId()' on a null object reference尝试在空对象引用上调用虚拟方法 com.google.firebase.iid.FirebaseInstanceId.getInstanceId()'
【发布时间】:2019-05-10 13:50:50
【问题描述】:

我将使用firebase-messaging 库并尝试在应用启动时使用以下方法获取令牌。

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener() { @覆盖 公共无效 onSuccess(InstanceIdResult instanceIdResult) { 字符串令牌 = instanceIdResult.getToken(); // 打印令牌 } });

应用程序在启动时崩溃

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>

构建.gradle:

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

另外,我曾尝试在 SharedPreferences 中缓存令牌,但似乎从未调用过 onNewToken()。

@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();
    }

可能是什么问题?

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    合并清单中存在问题,合并清单中缺少以下服务。 在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>
    

    现在一切正常。

    【讨论】:

    • 它对我来说仍然崩溃。有什么建议吗?
    • 对我来说还有什么建议吗?
    • @all 我会告诉你我解决它的方法。我创建了一个示例项目并使用了 firebase-messaging 库并比较了示例项目的合并清单和我的原始项目。您可以执行相同的操作并找出两者都缺少的内容,将缺少的条目添加到您的原始项目中,它应该可以工作。
    • 无法在 onMesssageRecieve 中获取通知我使用上面相同的代码
    • 三天后遇到同样的问题我不知道是什么问题
    【解决方案2】:

    我在将 .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 也丢失了,此接收器通过清单合并自动添加到您的应用程序的清单文件中,在我们的例子中它丢失了在合并中,所以我们需要手动添加它,如下所示:

    <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

    • 注意:您可能需要在您的ApplicationClass 中添加FirebaseApp.initializeApp(this); onCreate

      public class MyApplicationClass extends Application {
      
      @Override
      public void onCreate() {
          super.onCreate();
          FirebaseApp.initializeApp(this);
      }
      

    【讨论】:

      【解决方案3】:

      您需要添加以下软件包,

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2019-01-10
        • 2015-06-26
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多