0

管理者がコントロールパネルからユーザーアカウントをアクティブにすると、アプリがFCM通知を受け取ります。トーストのようなメソッドからいくつかのアクションを実行したいときや、ユーザーがプッシュ通知をクリックします。プッシュ通知をクリックするとロジックを行う方法

これは可能ですか?

ここFirebaseMessagingServiceクラス内のコード

public class CustomFirebaseMessagingService extends FirebaseMessagingService { 

    public static String INTENT_FILTER = "INTENT_FILTER"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

    try { 

     if (remoteMessage.getNotification() != null) { 

     Intent intent = new Intent(INTENT_FILTER); 
     sendNotification(remoteMessage.getNotification().getBody(), intent); 
     sendBroadcast(intent); 
     } 
    } catch (Exception ex) { 
    } 
    } 


    private void sendNotification(String messageBody, Intent intent) { 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.logo) 
     .setContentTitle("UPDATE") 
     .setContentText(messageBody) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 

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

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
} 

答えて

1

アプリがバックグラウンドのときに通知をクリックできるようにするには、通知ペイロードにclick_action属性が必要です。これは、アプリがフォアグラウンドにあるときに機能するため、FirebaseMessagingServiceなどのクラスとは完全に別です。

Firebaseドキュメントのsectionを確認してください。

また、click_action属性を定義するときは、起動するアクティビティの<intent-filter>に対応する<action>属性も必要です。

このvideoは非常に詳細に説明しています。

Fireboxコンソールから通知を送信する場合は、click__action属性を設定できないことに注意してください。独自の管理サーバから通知を送信する場合、またはFirebase Cloud Functionsを使用する場合にのみ行うことができます。

最後に、起動されたアクティビティで、data属性(前述のリンク先と同じドキュメントにも表示されています)を使用して、さらにDataを設定することができます。通知をクリックしてアプリを起動すると、getIntent()を使用して通知データを取得できます。それを行う方法の詳細については、this answerを参照してください。

本当にシンプルでエレガントです。

UPDATE

たとえば、あなたの通知ペイロードは以下の構造を持っている場合は、

payload = { 
    notification: { 
    title: `You ordered a new product`, 
    click_action : 'HANDLE_NOTIFICATION', 

    }, 
    data : { 
     product_id : 'ABC98292', 
     type : `Clothes`, 
     product_name : 'Cotton spring shirt' 
    } 
}; 

、あなたは通知があるときに開くようにしたい活動のタグにフィルタを置きますクリックした例は以下の通りです: -

<intent-filter> 
    <action android:name="HANDLE_NOTIFICATION" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

次に、あなたがそうで getIntent().getStringsExtra("product_id")とを使用して通知からのproduct_idを得ることができます。

このようにして、必要なアクティビティを開き、通知から取得した関連する詳細を入力できます。

Intent intent = new Intent(NotificationActivity.this, SecondActivity.class); 
intent.putExtra("call_from", "NotificationActivity"); 

をして取り戻すために:

+0

バックグラウンドの幸運はありませんでしたが、アクティビティを開くだけですが、意図した目的から送られてきたデータの条件を実行しません。 .. !!?どんな助けをここに..!私はビデオのなかで正確に何をしたのですか –

+0

@SamZar正確にあなたのコードで何が動作していないのかわからないので、私は自分の答えを編集してあなたの問題をカバーする必要があります。編集内容を確認し、それでも解決しない場合は戻ってください。 –

+0

これはうまくいきました:D、以前はうまくいきませんでした。なぜなら、データの 'value'を' getStringExtra'の中に入れたのですが、 'key'で置き換えると、それは魅力的でした。ありがとう、たくさんの男! –

1

はいあなたはそれだけであるかの状態を確認し、活動にと活動 クラスのonCreateに参考のために putextraを使用して意図して、いくつかの整数値を渡すんすることができますがありますそれに応じて変更します。

+0

アプリがバックグラウンドで動作しない場合 –

1

あなたがあなたの活動の内部着信通知をリスナーにLocalBroadcastReceiverを追加する必要があります。

boolean isReceiverRegistered = false ; // to not create receiver twice 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mBroadcastReceiver = new MyBroadcastReceiver(); 
    registerReceiver(); 
    //code 
} 

private class MyBroadcastReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      switch (action) { 
       case YOUR_ACTION: 
        handleIncomingAction(intent); 
        break; 
      } 
     } 
    } 

private void registerReceiver() { 
     if (!isReceiverRegistered) { 
      IntentFilter intentFilter = new IntentFilter(); 
      intentFilter.addAction(YOU_ACTION); 
      LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(mBroadcastReceiver, intentFilter); 
      isReceiverRegistered = true; 
     } 
    } 
+0

私はこれを試しましたが、何も起こらず、何が 'handleIncomingAction'であるかは本当にあなたのコードにあります..!?アプリがバックグラウンドのときに通知をクリックしたときにこれが有効であることを確認してください。 –

1

ロジックが意図して追加のパラメータを追加し、発射活動でそれをチェックすることであるのonCreateメソッド

あなたの活動で
private void sendNotification(String messageBody, Intent intent) { 
// set extra param 
intent.putExtra("is_from_notification", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
    PendingIntent.FLAG_ONE_SHOT); 

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
    .setSmallIcon(R.drawable.logo) 
    .setContentTitle("UPDATE") 
    .setContentText(messageBody) 
    .setAutoCancel(true) 
    .setSound(defaultSoundUri) 
    .setContentIntent(pendingIntent); 

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

notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
} 

@override 
protected void onCreate(Bundle savedInstance) { 
    super.onCreate(savedInstance); 

    if (getIntent().getBooleanExtra("is_from_notification", false)) { 
     // TODO: do whatever you want in here 
    } 
} 
+0

は、アプリがバックグラウンドで起動しても機能しませんでした –

1

は、私はあなたが意図を起動したときに、ユーザは、このようなから来ている活動から見て、活動のための「フラグ」を追加提案

String fromActivity = (String) getIntent().getExtras().get("call_from"); 
if(fromActivity.equals(NotificationActivity.class.getSimpleName())) { 
    //call your method to delete what you want 
} 

希望します。

+0

は、アプリがバックグラウンドで動作していないと動作しません。 –

+0

あなたのアクティビティの名前の代わりに「this」を使用してみてください。 –

関連する問題