Android应用未收到FCM推送消息

时间:2017-09-21 07:26:11

标签: android firebase firebase-cloud-messaging

我正在尝试从Firebase向我的Android应用程序发送推送消息:

MyFirebaseInstanceIDServiceMyFirebaseMessagingService类都在我的主程序包的服务包中。下面是我的文件夹结构

enter image description here

所以在我的AndroidManifest中,它们被表示为

<service
    android:name=".services.MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>
<service
    android:name=".services.MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

MyFirebaseInstanceIDService类:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
    @Override
    public void onTokenRefresh() {
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "-------- refreshedToken: " + refreshedToken);


        //TODO: send the token to the node server to store it in mysql


    }
}    

MyFirebaseMessagingService类:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());

        if(remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }

        if(remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

        Intent intent = new Intent(this, SplashActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "280887");
        notificationBuilder.setContentTitle("FCM Notification");
        notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
        notificationBuilder.setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());

    }
}

问题是当我运行我的应用程序时,我没有获得注册令牌。我在网上或youtube上看过的所有例子都是单个包下的所有文件。但在我的情况下,我得到了每种类型文件的子包。这是问题吗?

此外,在MyFirebaseInstanceIDService中,当我将令牌存储在共享首选项中并在HomeActivity中检索它时,令牌为空。

*****************编辑*****************

我的Logcat提供了Tag Manager is not found and thus will not be used条消息。它没有显示任何标签V,I,D不是它们

2 个答案:

答案 0 :(得分:0)

您需要在Firebase中添加项目,然后下载名为&#34; google.json&#34;的文件。并将其插入项目中。否则验证将失败,您将无法收到任何令牌。 此外,在更改之前,您不会收到任何新令牌。 另一方面,Google通常不会在调试模式下立即发送推送。

答案 1 :(得分:0)

将注册发送到服务器

确保您已将项目添加到 Firebase 并下载了正确的 google-services.json 文件并将其放入应用文件夹

使用与下面类似的代码并将令牌注册到服务器

package com.dev.gideon.services;


import [LOCATION-TO-YOUR-SHAREDPREF].SharedPref;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class FcmInstanceIDService extends FirebaseInstanceIdService {


    private SharedPref sharedPref;

    @Override
    public void onTokenRefresh() {
        sharedPref = new SharedPref(this);
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        sendRegistrationToServer(refreshedToken);
    }

    private void sendRegistrationToServer(String token) {
        sharedPref.setFcmRegId(token);
        sharedPref.setOpenAppCounter(SharedPref.MAX_OPEN_COUNTER);
    }
}

尝试帮助!!!