Firebase云消息传递:在android 12中未接收消息

nkcskrwz  于 2023-02-09  发布在  Android
关注(0)|答案(2)|浏览(208)

我正在尝试使用Firebase消息服务向Android 12设备发送推送通知。当我尝试从nodeJs发送FCM时,onMessageReceived调用。我尝试从Firebase控制台发送FCM,但即使应用程序是在后台的应用程序是不显示任何通知或错误。我已经测试了这个应用程序在android 11android 10**并且两者都工作良好。
AndroidManifest.xml

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

<application
        android:allowBackup="true"
        android:icon="@mipmap/icon"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/icon_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MobileSMSService"
        android:usesCleartextTraffic="true">

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

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/sms_icon_foreground" />
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/purple_700" />
</service>
</application>

MessagingService.java

public class MessagingService extends FirebaseMessagingService {

    private static final String CHANNEL_ID = "FCM";
    private static final String TAG = "MessagingService";
    whatsappMessageService messageService;

    @Override
    public void onNewToken(@NonNull String s) {
        super.onNewToken(s);
        JSONObject obj = new JSONObject();
        SharedPreferences sp = getSharedPreferences("Login", MODE_PRIVATE);
        String api = sp.getString("api", null);
        sp.edit().putString("token", s).apply();
        try {
            obj.put("token", s);
            obj.put("api", api);
            new Server().post(new Server().baseUrl + "update-token", obj.toString(), new Callback() {
                @Override
                public void onFailure(@NonNull Call call, @NonNull IOException e) {

                }

                @Override
                public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {

                }
            });
        } catch (Exception e) {
            Log.e("MessagingService", "onNewToken: ", e);
        }
    }

    @Override
    public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        Log.e(TAG, "onMessageReceived: recived" );
        Map<String, String> data = remoteMessage.getData();
        if (data.get("web") == null) {
            String message = data.get("message"), to = data.get("to"), plat = data.get("plat");
            if (plat != null) {
                if (plat.equals("w")) {
                    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
                    boolean isScreenOn = pm.isScreenOn();
                    boolean isScreenOnApi21 = pm.isInteractive();
                    if (!isScreenOn | !isScreenOnApi21) {
                        SharedPreferences sp = getApplicationContext().getSharedPreferences("Login", MODE_PRIVATE);
                        if (sp.getString("wake_phone", null) != null) {
                            sendSMS(sp.getString("wake_phone", null), "Wake up");
                            new MessagesDatabaseHelper(this).insertMessage(sp.getString("wake_phone", null), "Wake up");
                            try {
                                Thread.sleep(3500);
                                isScreenOn = pm.isScreenOn();
                                isScreenOnApi21 = pm.isInteractive();
                                if (!isScreenOn | !isScreenOnApi21) {
                                    Thread.sleep(3500);
                                }
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        } else {
                            return;
                        }
                    }

                    if (messageService == null) {
                        messageService = new whatsappMessageService(getApplicationContext());
                        messageService.start();
                    }
                    messageService.addMessage(to, message);
                    new WhatsappDatabaseHelper(this).insertMessage(to, message);
                } else {
                    new MessagesDatabaseHelper(this).insertMessage(to, message);
                    sendSMS(to, message);
                }

                Intent intents = new Intent();
                intents.setAction("sms_receiver");
                getBaseContext().sendBroadcast(intents);
            }
        } else {
            Log.e(TAG, "onMessageReceived: " + "web");
            new webManager().onMessage(data);
        }

    }
mfpqipee

mfpqipee1#

您好,您的清单文件的格式不是很好,请检查下面的清单,并进行相应的调整,也请确保您有一个FirebaseMessagingService

<meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@mipmap/ic_launcher" />
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

    <service android:name=".service.MyFcmListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

还要检查您的build.gradle并添加以下依赖项的左大括号

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

FirebaseMessagingService应采用以下格式:

public class MyFirebaseMessagingService  extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage message) {
        String from = message.getFrom();
        Map data = message.getData();

        Log.e("Message", "Could not parse malformed JSON: \"" + data.toString() + "\"");

        //generateNotification(getApplicationContext(), data);
    }

    @Override
    public void onNewToken(String token) {

        //Log.d(TAG, "Refreshed token: " + token);

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        Toast.makeText(getApplicationContext(),"Token "+token,Toast.LENGTH_LONG).show();
        //App.getInstance().setGcmToken(token);

    }

    @Override
    public void onDeletedMessages() {
        sendNotification("Deleted messages on server");
    }

    @Override
    public void onMessageSent(String msgId) {

        sendNotification("Upstream message sent. Id=" + msgId);
    }

    // Put the message into a notification and post it.
    // This is just one simple example of what you might choose to do with
    // a GCM message.
    private void sendNotification(String msg) {

        Log.e("Message", "Could not parse malformed JSON: \"" + msg + "\"");
    }

}
rqqzpn5f

rqqzpn5f2#

对于新来的人谁可能会来这个问题,我有完全相同的问题:
在我的例子中,我仍然使用Firebase库17.x和过时的架构。
现在我把firebase依赖项更新到了23.0.4版,它运行得很好。

相关问题