Push-уведомление onMessageReceived метод в FirebaseMessagingService не вызывается? - PullRequest
0 голосов
/ 06 ноября 2018

Я уже внедрил службу в манифесте android и до сих пор не получил ответа от службы FirebaseMessagingService . Странно то, что уведомление успешно отправлено. Когда я пытался отладить и добавить точку останова к методу onMessageReceived , я мог получить уведомление, но при первой установке без присоединения отладки служба не вызывается, поэтому ответ на обратный вызов от FirebaseMessagingService * не вызывается 1006 *. Таким образом, в основном FirebaseMessagingService будет работать, если я отлаживаю приложение, но когда оно не в отладке, обратный вызов из FirebaseMessagingService .

не вызывается.

Я использовал телефон Samsung Galaxy J7pro для Android версии OREO (API 27).

AndroidManifest.xml добавил следующее в файл манифеста.

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

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

build.gradle (приложение) добавил следующее в файл build.gradle.

implementation 'com.google.firebase:firebase-messaging:17.3.4'
implementation 'com.google.firebase:firebase-core:16.0.5'
}
apply plugin: 'com.google.gms.google-services'

NotificationService.java

public class NotificationService extends FirebaseMessagingService {


@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    // dbManagerPushNotification.DBManagerPushNotification(this);


    if (remoteMessage.getData().size() > 0) {
        Map<String, String> remoteMessage_getData = remoteMessage.getData();

        String community_slug = remoteMessage_getData.get("community_slug");
        String conversation_id = remoteMessage_getData.get("conversation_id");
        String sender_id = remoteMessage_getData.get("sender_id");
        final String message_id = remoteMessage_getData.get("message_id");
        String message = remoteMessage_getData.get("message");
        String convo_type = remoteMessage_getData.get("convo_type");
        String created_at = remoteMessage_getData.get("created_at");
        String title = remoteMessage_getData.get("title");
        Log.i("push_notification", "onMessageReceived: " + message);

        final String channel_id = title + community_slug;

        Intent intent = new Intent(this, MainActivity.class);


        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.putExtra("message", message);
        intent.putExtra("message_id", message_id);
        intent.putExtra("conversation_id", conversation_id);
        intent.putExtra("sender_id", sender_id);
        intent.putExtra("community_slug", community_slug);

        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), message_id.hashCode(), intent, 0);


        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


        SpannableStringBuilder spannableStringBuilder_title = new SpannableStringBuilder(title);
        StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
        spannableStringBuilder_title.setSpan(boldSpan, 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel mChannel = new NotificationChannel(channel_id, title, NotificationManager.IMPORTANCE_HIGH);
            AudioAttributes attributes = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build();
            mChannel.enableLights(true);
            mChannel.setLightColor(Color.WHITE);
            assert notificationManager != null;
            notificationManager.createNotificationChannel(mChannel);
        }

        final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), channel_id)
                .setSmallIcon(R.drawable.ic_notif_logo)
                .setColor(0xECEFF1)
                .setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(true)
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setContentIntent(pendingIntent)
                .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
                .setGroup(convo_type)
                .setGroupAlertBehavior(GROUP_ALERT_CHILDREN)
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.selection_orange))
                .setPriority(NotificationCompat.PRIORITY_MAX);

        String community_notif = "  " + community_slug + ": ";
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(community_notif);
        spannableStringBuilder.setSpan(new ForegroundColorSpan(getApplicationContext().getResources().getColor(R.color.selection_orange)), 0, community_notif.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


        NotificationCompat.Builder summaryNotification = new NotificationCompat.Builder(getApplicationContext(), channel_id)
                .setContentTitle(title)
                .setSmallIcon(R.drawable.ic_notif_logo)
                .setStyle(new NotificationCompat.InboxStyle().setSummaryText(TextUtils.concat(spannableStringBuilder, title)).setBigContentTitle(TextUtils.concat(spannableStringBuilder, title)))
                .setGroup(convo_type)
                .setAutoCancel(true)
                .setGroupAlertBehavior(GROUP_ALERT_CHILDREN)
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.selection_orange))
                .setGroupSummary(true)
                .setPriority(NotificationCompat.PRIORITY_MAX);

        assert notificationManager != null;
        notificationManager.notify(message_id.hashCode(), mBuilder.build());
        notificationManager.notify(channel_id.hashCode(), summaryNotification.build());

    }
}

}

...