首页 > 解决方案 > 我没有收到 FCM 消息,可能 FirebaseMessagingService 没有运行

问题描述

我正在使用 FCM 进行通知。由于某些问题,我在使用 FCM 云控制台发送时没有收到通知。

   <service android:name=".MyInstanceIDService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <service android:name=".MyMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

这是我的两门课。

    public class MyInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyInstanceIDService";

    @Override
    public void onTokenRefresh() {
       String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        System.out.println("Refreshed token: " + refreshedToken);
        // Util.getInstance().saveDeviceID(UniversalImageLoaderConfigurationApplication.getContext(), refreshedToken);
        // sendRegistrationToServer(refreshedToken);
    }

    }

    public class MyMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyMessagingService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        //Displaying data in log
        //It is optional
        // if(LOG)
        Log.d(TAG, "From: " + remoteMessage.getFrom());
//        Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());

        Map<String, String> data = remoteMessage.getData();
        int id = Integer.parseInt(data.get("id"));
        if (id == (Constants.NOTI_NOTIFCATION)) {
            String title = data.get("title");
            String body = data.get("body");
            sendNotification(id, title, body, "");
        } else {
            sendNotification(1, "", "", "");
        }

    }

     }

我注意到public void onTokenRefresh()从未调用过。所以我用了它

字符串 refreshedToken = FirebaseInstanceId.getInstance().getToken();

在我的 MainActivity 中,我得到了 tokenID。可能 FirebaseInstanceIdService 和 FirebaseMessagingService 没有运行。下面是我的毕业典礼

  implementation 'com.google.firebase:firebase-messaging:17.0.0'
implementation 'com.google.firebase:firebase-core:16.0.1'

我也用过

apply plugin: 'com.google.gms.google-services'

这是我的根级 gradle

buildscript {
repositories {
//    google()
    maven { url "https://maven.google.com" }
    jcenter()
   // mavenCentral()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.3'
    classpath 'com.google.gms:google-services:4.0.1' // google-services     plugin

    }

}

allprojects {
repositories {
   // google()
    mavenLocal()
    maven { url "https://maven.google.com" }
    jcenter()
    mavenCentral()
    google()
}
}

标签: androidfirebasefirebase-cloud-messaging

解决方案


对于您的服务声明,这些操作是相反的。改成这样:

   <service android:name=".MyInstanceIDService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>
    <service android:name=".MyMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

请参阅文档中的示例


推荐阅读