web-dev-qa-db-ja.com

Firebase Cloud Messaging(FCM)-ユーザーが追加の通知をクリックするとアクティビティを起動する

ユーザーが通知をクリックしたとき、アプリがバックグラウンドにあるときに、いくつかの追加パラメーターを使用して特定のアクティビティを開こうとしています。 click_actionを使用していますが、正常に機能しています。アプリは目的のアクティビティを開きます。

ここで、通知に関連する目的の詳細を提示できるように、サーバーがこのアクティビティにidという追加のパラメーターを渡す必要があります。電子メールアプリケーションのように、通知をクリックすると、その特定の電子メールの詳細が開きます。

これどうやってするの?

14
m4n3k4s

OK、解決策を見つけました。

これは、サーバーからアプリに送信する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(idOffer);
    }

    ...
}

それでおしまい...

38
m4n3k4s

アクティビティの開始に使用する追加情報をIntentに追加し、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");
    ....
}
0
Oleg Vladimirov