Как отправить уведомление FCM на все устройства? Как получить токен для другого устройства - PullRequest
0 голосов
/ 03 ноября 2018

Я добавил службу FCM, и теперь мне нужно отправлять уведомления всем устройствам в любом случае

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

Почтовый индекс:

{
 "to" : "/topics/refreshedToken",
 
 "collapse_key" : "type_a",
 "notification" : {
     "body" : "Test Notification",
      "click_action": "PRO",
     "title": "Hello ?"
 },
 "data" : {
     "body" : "GET CREDITS NOW",
     "click_action":"PRO",
     "title": "data title",
     "key_1" : "Value1",
     "key_2" : "Value2"
 }
}

Служба идентификации Firebase:

public class FirebaseIDService extends FirebaseInstanceIdService {
    private static final String TAG = "FirebaseIDService";

    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.e(TAG, "Refreshed token: " + refreshedToken);

        // TODO: Implement this method to send any registration to your app's servers.
        sendRegistrationToServer(refreshedToken);

        FirebaseMessaging.getInstance().subscribeToTopic(refreshedToken);

        FirebaseMessaging.getInstance().subscribeToTopic("com.thetechroot.vision");

    }

    /**
     * Persist token to third-party servers.
     *
     * Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // Add custom implementation, as needed.
    }
}

Класс обслуживания FirebaseMessaging:

public class MyFirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService  {
    private static final String TAG = "FirebaseMessagingServic";

    public MyFirebaseMessagingService() {
    }



    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        //To Get FCM TOKEN
        //eTBuGS-wrO4:APA91bGb1zBE1u9MIS1QrHo7MFaLfUROlAoDjZOpt7sdkLUpWe7K-yFcbYWxg1cMQPsl4vFAtuIr_N4MLkVlNQ93x0aRpAwP6Xw30M6PBWhC-R-GWLIJUgkOsDd4jAcwcdMUBeUTiS3g
        Log.d("Firebase", "token "+ FirebaseInstanceId.getInstance().getToken());

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            try {
                JSONObject data = new JSONObject(remoteMessage.getData());
                String jsonMessage = data.getString("extra_information");
                Log.d(TAG, "onMessageReceived: \n" +
                        "Extra Information: " + jsonMessage);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            String title = remoteMessage.getNotification().getTitle(); //get title
            String message = remoteMessage.getNotification().getBody(); //get message
            String click_action = remoteMessage.getNotification().getClickAction(); //get click_action

            Log.d(TAG, "Message Notification Title: " + title);
            Log.d(TAG, "Message Notification Body: " + message);
            Log.e(TAG, "Message Notification click_action: " + click_action);

            sendNotification(title, message,click_action);
        }
    }

    @Override
    public void onDeletedMessages() {

    }



    private void sendNotification(String title,String messageBody, String click_action) {
        Intent intent;
        Log.e(TAG,"@@@ Click action ::> " + click_action);
        if(click_action.equals("DEMOACTIVITY")){
            intent = new Intent(this, DemoActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        }
        else if(click_action.equals("MAINACTIVITY")){
            intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        }
        else if(click_action.equals("PRO")){
            intent = new Intent(this, PriceListActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        }else{
            intent = new Intent(this, MainActivity.class);
            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.mipmap.ic_launcher)
                .setContentTitle(title)
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

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

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

Теперь, как я могу отправить уведомление на все устройства и изменить «до» в коде почтальона.

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете подписаться на тему "all"

FirebaseMessaging.getInstance().subscribeToTopic("all");

А в Postman

{
 "to" : "/topics/all",
 // Rest of the JSON
}

Вы также подписались на refreshedToken, что на самом деле не требуется, поскольку каждое устройство по умолчанию подписано на token.

Вы также подписаны на com.thetechroot.vision

FirebaseMessaging.getInstance().subscribeToTopic("com.thetechroot.vision");

Так что в Postman вы также можете сделать

{
 "to" : "/topics/com.thetechroot.vision",
  // Rest of the JSON
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...