Android 应用在收到新的 FCM 消息时崩溃(前台和后台)

Posted

技术标签:

【中文标题】Android 应用在收到新的 FCM 消息时崩溃(前台和后台)【英文标题】:Android app crashes when receiving a new FCM message (foreground and background) 【发布时间】:2019-04-18 01:43:14 【问题描述】:

我正在努力在我的应用中实施 FCM。 我正在遵循文档中的指南并尝试按照文档中的建议实施一个简单的测试,但是每当我从控制台发送通知时,应用程序就会崩溃,因为它处于前台或后台。

**更新:我已经删除了服务类,它在 gradle 中的减速和实现。如果我尝试测试消息,应用程序仍然会崩溃。不应该完全不受它的影响吗?

这是我的扩展类:

import android.util.Log
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.iid.FirebaseInstanceId
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyFirebaseMessagingService : FirebaseMessagingService() 

    override fun onMessageReceived(p0: RemoteMessage?) 
        super.onMessageReceived(p0)

        Log.d("newMessage", p0!!.notification!!.body)
    

    override fun onNewToken(p0: String?) 
        super.onNewToken(p0)
        FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener  idResult ->
            val uid = FirebaseAuth.getInstance().uid ?: ""

            val token = idResult.token

            val userRef = FirebaseDatabase.getInstance().getReference("/users/$uid/services/firebase-token")
            userRef.setValue(token)
        
    

这是我的清单:

    <service
            android:name=".otherClasses.MyFirebaseMessagingService"
            android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

这是崩溃日志:

2019-04-18 11:45:44.007 21257-21295/co.getdere E/AndroidRuntime: FATAL EXCEPTION: Firebase-WrappedFirebaseMessagingService
    Process: co.getdere, PID: 21257
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
        at android.content.ContextWrapper.getPackageName(ContextWrapper.java:135)
        at com.google.firebase.messaging.zzb.<init>(Unknown Source:5)
        at com.google.firebase.messaging.FirebaseMessagingService.zzd(Unknown Source:58)
        at com.google.firebase.iid.zzb.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:6)
        at java.lang.Thread.run(Thread.java:764)

【问题讨论】:

添加您的崩溃堆栈跟踪 你能贴出错误信息(logcat)吗? 当然,我的错,补充说。 @Anddever 我已经添加了日志和更新,即使我删除所有内容以重新开始并尝试发送消息,它也会崩溃。 What is a NullPointerException, and how do I fix it?的可能重复 【参考方案1】:

就这样试试吧。它可能有效

class MyFirebaseMessagingService : FirebaseMessagingService() 
    companion object 

        private val TAG = "MyFirebaseMsgService"
    

    override fun onNewToken(s: String?) 
        super.onNewToken(s)
        //        Displaying token on logcat
        Log.e(TAG, "Refreshed token: " + s!!)
    

    override fun onMessageReceived(remoteMessage: RemoteMessage?) 
        Log.e(TAG, "onMessageReceived")
        

将其添加到清单文件中

 <service
     android:name=".fcm.MyFirebaseMessagingService"
      android:exported="false">
      <intent-filter>
     <action android:name="com.google.firebase.MESSAGING_EVENT" />
      </intent-filter>
    </service>

【讨论】:

以上是关于Android 应用在收到新的 FCM 消息时崩溃(前台和后台)的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native-push-notification,App 在收到新的 FCM 通知时崩溃

使用 react-native-firebase 在 Android 中关闭应用程序时未收到 fcm 消息

在收到 Firebase 通知时打开应用 (FCM)

如果设备收到来自 fcm 的推送通知,如何向处于终止状态的 android 应用程序显示/通信/广播消息

如果客户端发送新的注册令牌时应用服务器离线怎么办?

FCM 未收到通知消息