Открыть конкретное действие из уведомления Firebase

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

Я видел код консоли Firebase: как указать click_action для уведомлений, которые я использовал, но получаю ошибку при инициализации переменных cls. Я попытался решить, определив cls = null, чтобы очистить ошибку. Не удается открыть указанное действие с помощью click_action

public class ClickActionHelper { 
public static void startActivity(String className, Bundle extras, Context context){ 
Class cls=null; 
try { cls = Class.forName(className);
 }
catch(ClassNotFoundException e){ 
 //means you made a wrong input in firebase console 
} 
Intent i = new Intent(context, cls);
 i.putExtras(extras); context.startActivity(i); 
}     
}

пожалуйста, я что-то не так делаю? Как мне заставить это работать?

2 ответа

Если вы хотите открыть свое приложение и выполнить определенное действие [в то время как в фоновом режиме], установите click_action в полезной нагрузке уведомления и сопоставьте его с фильтром намерений в Activity, которую вы хотите запустить. Например, установите для click_action значение OPEN_ACTIVITY_1, чтобы активировать фильтр намерений, как показано ниже:

Как предлагается в документации по FCM, попросите серверную часть отправить данные JSON в такой форме:

 {

    "to":"some_device_token",

    "content_available": true, 
    "notification": {
    "title": "hello",
    "body": "yo",
    "click_action": "OPEN_ACTIVITY_1" // for intent filter in your activity
    },

"data": {
"extra":"juice"
}
}

и в вашем файле mainfest добавьте фильтр намерений для вашей деятельности, как показано ниже

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

Когда вы щелкнете по уведомлению, оно откроет приложение и сразу перейдет к активности, которую вы определили в click_action, в данном случае "OPEN_ACTIVTY_1". И внутри этой деятельности вы можете получить данные:

Bundle b = getIntent().getExtras();// add these lines of code to get data from notification
String someData = b.getString("someData");

Проверьте ниже ссылки для получения дополнительной помощи:

Уведомления Firebase FCM Полезная нагрузка click_action

Firebase onMessageReceived не вызывается, когда приложение в фоновом режиме

Консоль Firebase: как указать click_action для уведомлений

Я знаю, что этот вопрос был давно, но я все равно хотел показать свое решение. это намного проще, чем представленные. так что теперь я брожу, если это плохая практика. но это работает: я использую объект полезной нагрузки json для хранения целого числа:

JSONObject payload = data.getJSONObject("payload");
int destination = payload.getInt("click_action");

затем я просто использую простой оператор switch для запуска правильного действия на основе целочисленного результата:

Intent resultIntent;
switch(destination){
    case 1:
        resultIntent = new Intent(getApplicationContext(), UserProfileActivity.class);
        resultIntent.putExtra("message", message);
        break;
    default:
        resultIntent = new Intent(getApplicationContext(), MainActivity.class);
        resultIntent.putExtra("message", message);
        break;
}

Просто.

<activity android:name=".design.NotificationActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true"
        android:parentActivityName=".MainActivity"
        >
        <intent-filter>
            <action android:name="NotificationActivity" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>

    </activity>

        $ url = "https://fcm.googleapis.com/fcm/send";
        $token = "";
        $serverKey = '';
        $title = "your title";
        $body = "mesaage";
        $notification = array('title' =>$title ,
        'body' => $body, 
        'sound' => 'default',
        'badge' => '1',
        'click_action' => 'NotificationActivity'
        );
        $arrayToSend = array('to' => $token, 'notification' => $notification,'priority'=>'high');
        $json = json_encode($arrayToSend);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Authorization: key='. $serverKey;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
        //Send the request
        $response = curl_exec($ ch);
        //Close request
        if ($response === FALSE) {
        die('FCM Send Error: ' . curl_error($ch));
        }
        curl_close($ch)
Другие вопросы по тегам