【问题标题】:Why does FirebaseMessagingService.onMessageReceived() not getting called?为什么 FirebaseMessagingService.onMessageReceived() 没有被调用?
【发布时间】:2018-12-05 02:32:48
【问题描述】:

在我的 android 项目中,我包含 Firebase Cloud Messaging。我在 SDK 21 (Android 5) 上。

我的意图是重写MyFirebaseMessagingServiceonMessageReceived() 方法以捕获Firebase 发送的方法并创建我自己的通知。

但似乎onMessageReceived 无论如何都没有被调用。我按照 Android Studio 的内置说明来实现 firebase,并且使用 firebase 控制台进行测试实际上会发送一条由我的测试设备接收到的消息。

所以我的问题是,我是不是忘了实现一些东西?我有我的自定义 FirebaseMessagingService、一个 BroadcastReceiver 来实现通知中的操作,以及一个 Applicationclass 来创建和处理 SDK >= 26 的通知通道。

这是我的清单文件的一部分:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.VIBRATE" />

<application
    android:name=".Networking.Firebase.FireBaseApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Activities.MainActivity"/>
    <activity
        android:name=".Activities.SplashActivity"
        android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

    </activity>
    <service android:name=".Networking.Firebase.PushMessageService" />
    <receiver android:name=".Networking.Firebase.PushReceiver"/>
</application>

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:
    class MyFirebaseMessagingService : FirebaseMessagingService() {
    
        override fun onMessageReceived(message: RemoteMessage?) {
            super.onMessageReceived(message)
    
                //TODO  Your Code
    
            }
        }
    }
    
    
    <!-- Firebase Notifications Service -->
            <service
                android:name=".MyFirebaseMessagingService"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="com.google.firebase.MESSAGING_EVENT" />
                </intent-filter>
            </service>
            <!--
         Set custom default icon. This is used when no icon is set for incoming notification messages.
            -->
            <meta-data
                android:name="com.google.firebase.messaging.default_notification_icon"
                android:resource="@drawable/ic_notification" />
            <!--
                 Set color used with incoming notification messages. This is used when no color is set for the incoming
                 notification message. 
            -->
            <meta-data
                android:name="com.google.firebase.messaging.default_notification_color"
                android:resource="@color/colorAccent" />
    

    【讨论】:

      【解决方案2】:

      您需要两个服务扩展 1. FirebaseMessagingService 2. FirebaseInstanceIdService

      在清单中

      <service
          android:name="yourClassExtendsFirebaseMessagingService"
          android:enabled="true"
          android:exported="true"
          android:stopWithTask="false">
          <intent-filter>
              <action android:name="com.google.firebase.MESSAGING_EVENT" />
          </intent-filter>
      </service>
      <!-- [END firebase_service] -->
      <!-- [START firebase_iid_service] -->
      <service android:name="yourClassExtendsFirebaseInstanceIdService">
          <intent-filter>
              <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
          </intent-filter>
      </service>
      

      FirebaseInstanceIdService 需要刷新令牌。 在 Android O 及更高版本上,在某些设备上关闭时需要要求前提运行应用程序。

      【讨论】:

      • 我的 IDE 说,FirebaseInstanceIdService 已被弃用。是否已经有替代方案?
      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      相关资源
      最近更新 更多