Firebase Cloud Messaging (FCM) - запуск активности, когда пользователь нажимает уведомление с дополнительными функциями

Я пытаюсь открыть конкретное действие, когда пользователь нажимает уведомление, когда приложение находится в фоновом режиме, с некоторыми дополнительными параметрами. Я использую click_action, и он работает нормально, приложение открывает желаемую активность.

Теперь мне нужно, чтобы сервер передал дополнительный параметр id для этой операции, чтобы я мог представить нужные детали, связанные с уведомлением. Как и приложение электронной почты, при нажатии на уведомление открывается информация об этом конкретном письме.

Как я могу это сделать?

Ответ 1

Хорошо, я нашел решение.

Это json, который я отправляю с сервера в приложение

{
  "registration_ids": [
    "XXX",
    ...
  ],
  "data": {
    "id_offer": "41"
  },
  "notification": {
    "title": "This is the Title",
    "text": "Hello I'm a notification",
    "icon": "ic_push",
    "click_action": "ACTIVITY_XPTO"
  }
}

В AndroidManifest.xml

<activity
    android:name=".ActivityXPTO"
    android:screenOrientation="sensor"
    android:windowSoftInputMode="stateHidden">
    <intent-filter>
        <action android:name="ACTIVITY_XPTO" />        
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Когда приложение закрыто или находится в фоновом режиме, и пользователь нажимает на уведомление, он открывает мой ActivityXPTO, для получения id_offer мне нужно только

public class ActivityXPTO extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        String idOffer = "";

        Intent startingIntent = getIntent();
        if (startingIntent != null) {
            idOffer = startingIntent.getStringExtra("id_offer"); // Retrieve the id
        }

        getOfferDetails(id_offer);
    }

    ...
}

Что это...

Ответ 2

Добавьте дополнительную информацию в намерение, которое вы используете для запуска Activity, а в действии в методе onCreate используйте getIntent(). getExtras(), чтобы использовать их. Например:

Начальная деятельность:

Intent intent = new Intent(context, TargetActivity.class);
Bundle bundle = new Bundle();
bundle.putString("extraName", "extraValue"); 
intent.putExtras(bundle);
startActivity(intent); 

В действии

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bundle = getIntent().getExtras();
    String value = bundle.getString("extraName");
    ....
}