Отправка данных на активность при нажатии на уведомление Firebase в Android - PullRequest
0 голосов
/ 30 сентября 2018

В моем приложении я хочу использовать fireBase для уведомления .
Я хочу, чтобы при нажатии на уведомление (когда приложение закрыто, я имею в виду приложение background) отправитьданные с putExtra до mainActivity .
Я пишу ниже коды, но когда нажимаю на уведомление (в приложении это фон), но показать мне ноль дляgetStringExtra!

Класс MyNotificationManager:

public class MyNotificationManager {

    private Context mCtx;
    private Uri soundUri;
    private static MyNotificationManager mInstance;

    public MyNotificationManager(Context context) {
        mCtx = context;
    }

    public static synchronized MyNotificationManager getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MyNotificationManager(context);
        }
        return mInstance;
    }

    public void displayNotification(String title, String body) {

        soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        Intent intent = new Intent(mCtx, MainActivity.class);
        intent.putExtra("fcm_notification", "Y");

        PendingIntent pendingIntent = PendingIntent.getActivity(mCtx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mCtx, Constants.NOTIF_CHANNEL_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(title)
                .setSound(soundUri)
                .setAutoCancel(true)
                .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                .setContentText(body)
                .setContentIntent(pendingIntent);

        NotificationManager mNotifyMgr = (NotificationManager) mCtx.getSystemService(NOTIFICATION_SERVICE);

        if (mNotifyMgr != null) {
            mNotifyMgr.notify(1, mBuilder.build());
        }
    }
}

Класс MyFirebaseMessagingService:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        showNotify(remoteMessage.getFrom(), remoteMessage.getNotification().getBody());
    }

    private void showNotify(String title, String body) {
        MyNotificationManager myNotificationManager = new MyNotificationManager(getApplicationContext());
        //myNotificationManager.displayNotification(title, body);
        myNotificationManager.displayNotification(title, body);
    }
}

MainActivity class:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
if (checkIntent()) return;
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            checkIntent();
        }
    }, 1000);
}

private boolean checkIntent() {
    String value = getIntent().getStringExtra("fcm_notification");
    Toast.makeText(context, "" + value, Toast.LENGTH_SHORT).show();

    if (value == null) return false;

    if (value.equals("Y")) {
        startActivity(new Intent(this, LandingActivity.class));
        // open one activity.

    } else if (value.equals("another thing")) {
        // open another activity.
    }

    finish();
    return true;
}

При нажатии на уведомление (приложение является фоновым), покажите мне null сообщение в Toast для этой строки String value = getIntent().getStringExtra("fcm_notification");

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Попробуйте это:

Intent intent = new Intent(mCtx, MainActivity.class);
intent.putExtra("EXTRA_DATA", title);

И получить:

String value = getIntent().getStringExtra("EXTRA_DATA");

Лучше поменять ключ.Кроме того, кажется, что вам нужно отправить данные с консоли, а затем, отправив данные на другой Activity.

Я использовал текущее уведомление title, чтобы проверить, возвращает ли онtitle или нет. Если оно вернуло значение, попробуйте отправить данные из консоли.

0 голосов
/ 30 сентября 2018

При отправке уведомления с консоли добавьте пользовательские данные из «Дополнительные параметры»:

enter image description here

По какой-то причине Firebase не позволяетключ, чтобы начать с Fcm.Вы не можете использовать fcm_notification.Используйте другой ключ.

Для изображения выше, получите ключ следующим образом:

String value = getIntent().getStringExtra("test_key");
...