<tfoot id='VT5iV'></tfoot>

  • <legend id='VT5iV'><style id='VT5iV'><dir id='VT5iV'><q id='VT5iV'></q></dir></style></legend>
      <bdo id='VT5iV'></bdo><ul id='VT5iV'></ul>

    <small id='VT5iV'></small><noframes id='VT5iV'>

      1. <i id='VT5iV'><tr id='VT5iV'><dt id='VT5iV'><q id='VT5iV'><span id='VT5iV'><b id='VT5iV'><form id='VT5iV'><ins id='VT5iV'></ins><ul id='VT5iV'></ul><sub id='VT5iV'></sub></form><legend id='VT5iV'></legend><bdo id='VT5iV'><pre id='VT5iV'><center id='VT5iV'></center></pre></bdo></b><th id='VT5iV'></th></span></q></dt></tr></i><div id='VT5iV'><tfoot id='VT5iV'></tfoot><dl id='VT5iV'><fieldset id='VT5iV'></fieldset></dl></div>

        Firebase (FCM):打开活动并在通知点击时传递数据.安卓

        时间:2023-07-30

          <tfoot id='7Ak3d'></tfoot>

          <small id='7Ak3d'></small><noframes id='7Ak3d'>

              <bdo id='7Ak3d'></bdo><ul id='7Ak3d'></ul>
            • <legend id='7Ak3d'><style id='7Ak3d'><dir id='7Ak3d'><q id='7Ak3d'></q></dir></style></legend>
                  <i id='7Ak3d'><tr id='7Ak3d'><dt id='7Ak3d'><q id='7Ak3d'><span id='7Ak3d'><b id='7Ak3d'><form id='7Ak3d'><ins id='7Ak3d'></ins><ul id='7Ak3d'></ul><sub id='7Ak3d'></sub></form><legend id='7Ak3d'></legend><bdo id='7Ak3d'><pre id='7Ak3d'><center id='7Ak3d'></center></pre></bdo></b><th id='7Ak3d'></th></span></q></dt></tr></i><div id='7Ak3d'><tfoot id='7Ak3d'></tfoot><dl id='7Ak3d'><fieldset id='7Ak3d'></fieldset></dl></div>

                    <tbody id='7Ak3d'></tbody>
                  本文介绍了Firebase (FCM):打开活动并在通知点击时传递数据.安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  应该明确实现如何使用 Firebase 通知和数据.我阅读了很多答案,但似乎无法使其发挥作用.这是我的步骤:

                  There should be clear implementation of how to work with Firebase notification and data. I read many answers but can't seem to make it work. here are my steps:

                  1.) 我正在用 PHP 向 android 传递通知和数据,这似乎很好:

                  1.) I am passing notification and data to android in PHP and it seems to be fine:

                  $msg = array
                      (
                           "body" => $body,
                           "title" => $title,
                           "sound" => "mySound"
                      );
                  
                      $data = array
                      (
                  
                           "user_id" => $res_id,
                           "date" => $date,
                           "hal_id" => $hal_id,
                           "M_view" => $M_view
                      );
                  
                      $fields = array
                      (
                          'registration_ids' => $registrationIds,
                          'notification' => $msg,
                          'data' => $data
                      );
                  
                  
                  
                      $headers = array
                      (
                          'Authorization: key='.API_ACCESS_KEY,
                          'Content-Type: application/json'
                      );
                  
                      $ch = curl_init();
                      curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
                      curl_setopt( $ch,CURLOPT_POST, true );
                      curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
                      curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
                      curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
                      curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
                      $result = curl_exec($ch );
                      curl_close( $ch );
                  

                  2.) 在 Android 中收到通知和数据时,它会显示通知.当我单击此通知时,它会打开应用程序.但是我不知道打开应用程序时处理数据的方法.当应用程序处于前台和后台时,存在一些差异.我现在拥有的代码如下:

                  2.) when notification and data is received in Android it shows notification. When I click on this notification it opens app. But I can not figure out the way to handle the data when the app is opened. There are couple differences when app is in foreground and backround. The code that I have now is the following:

                  public class MyFirebaseMessagingService extends FirebaseMessagingService {
                  
                  private static final String TAG = "MyFirebaseMsgService";
                  
                  @Override
                  public void onMessageReceived(RemoteMessage remoteMessage) {
                  
                      String user_id = "0";
                      String date = "0";
                      String cal_id = "0";
                      String M_view = "0";
                  
                      if (remoteMessage.getData().size() > 0) {
                          Log.d(TAG, "Message data payload: " + remoteMessage.getData());
                          user_id = remoteMessage.getData().get("user_id");
                          date = remoteMessage.getData().get("date");
                          hal_id = remoteMessage.getData().get("hal_id");
                          M_view = remoteMessage.getData().get("M_view");
                      }
                  
                      //Calling method to generate notification
                      sendNotification(remoteMessage.getNotification().getBody(), user_id, date, hal_id, M_view);
                  }
                  
                  private void sendNotification(String messageBody, String user_id, String date, String hal_id, String M_view) {
                      Intent intent = new Intent(this, MainActivity.class);
                      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                  
                      intent.putExtra("fcm_notification", "Y");
                      intent.putExtra("user_id", user_id);
                      intent.putExtra("date", date);
                      intent.putExtra("hal_id", hal_id);
                      intent.putExtra("M_view", M_view);
                      int uniqueInt = (int) (System.currentTimeMillis() & 0xff);
                      PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), uniqueInt, intent,
                              PendingIntent.FLAG_UPDATE_CURRENT);
                  
                      Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
                      notificationBuilder.setSmallIcon(R.drawable.ic_launcher)
                              .setContentText(messageBody)
                              .setAutoCancel(true)
                              .setSound(defaultSoundUri)
                              .setContentIntent(pendingIntent);
                  
                      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                      notificationManager.notify(0, notificationBuilder.build());
                  }}
                  

                  3.) 当我使用上面的代码并单击通知时,它会在后台打开应用程序.如果应用程序在前台,那么在通知上单击它只会关闭通知.但是,我想在两种场景(后台和前台)中接收数据并打开特定的活动.我在 MainActivity 中有以下代码,但我无法获取数据.fcm_notification, date, hal_id 返回 null.

                  3.) When I use the code above and when I click on notification all it does it opens the app if in background. If app in foreground then on notification click it simply dismisses notification. However, I want to receive data and open specific Activity in both scenarios (background and foreground). I have in MainActivity the following code, but I am not able to get data. fcm_notification, date, hal_id returns null.

                  public class MainActivity extends Activity {
                   UserFunctions userFunctions;
                  
                  @Override
                  protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_main);
                  }
                  
                  @Override
                  protected void onNewIntent(Intent intent) {
                      super.onNewIntent(intent);
                      setIntent(intent);
                      Intent intent_o = getIntent();
                  }
                  
                  @Override
                  protected void onResume() {
                      super.onResume();
                      userFunctions = new UserFunctions();
                      if(userFunctions.isUserLoggedIn(getApplicationContext())){
                          Intent intent_o = getIntent();
                          String fcm_notification = intent_o.getStringExtra("fcm_notification") ;
                          String user_id = intent_o.getStringExtra("user_id");
                          String date = intent_o.getStringExtra("date");
                          String hal_id = intent_o.getStringExtra("hal_id");
                          String M_view = intent_o.getStringExtra("M_view");
                          Intent intent = new Intent(this, JobList.class);
                  
                          // THIS RETURNS NULL, user_id = null
                          System.out.print("FCM" + user_id);
                          startActivity(intent);
                          finish();
                      }else{
                          // user is not logged in show login screen
                          Intent login = new Intent(this, LoginActivity.class);
                          startActivity(login);
                          // Closing dashboard screen
                          finish();
                      }
                  }}
                  

                  如果任何人都可以指导或建议我如何在任一场景(前台或后台)中从 Firebase 检索 MainActivity.java 中的数据,那将是非常棒的.

                  IF anyone can direct or advice how can I retrieve data in MainActivity.java from Firebase in either scenario (foreground or background) that would be fantastic.

                  推荐答案

                  在尝试了所有的答案和博客后想出了解决方案.如果有人需要,请将此视频作为参考

                  After trying all the answers and blogs came up with solution. if anyone needs please use this video as reference

                  https://www.youtube.com/watch?v=hi8IPLNq59o

                  除了视频之外,在 MyFirebaseMessagingService 中添加意图:

                  IN ADDITION to the video to add intents do in MyFirebaseMessagingService:

                  public class MyFirebaseMessagingService extends FirebaseMessagingService {
                  
                  private static final String TAG = "MyFirebaseMsgService";
                  
                  @Override
                  public void onMessageReceived(RemoteMessage remoteMessage) {
                  
                      String user_id = "0";
                      String date = "0";
                      String hal_id = "0";
                      String M_view = "0";
                  
                      if (remoteMessage.getData().size() > 0) {
                          Log.d(TAG, "Message data payload: " + remoteMessage.getData());
                          user_id = remoteMessage.getData().get("user_id");
                          date = remoteMessage.getData().get("date");
                          cal_id = remoteMessage.getData().get("hal_id");
                          M_view = remoteMessage.getData().get("M_view");
                      }
                  
                      String click_action = remoteMessage.getNotification().getClickAction();
                  
                      //Calling method to generate notification
                      sendNotification(remoteMessage.getNotification().getBody(), remoteMessage.getNotification().getTitle(), user_id, date, hal_id, M_view, click_action);
                  }
                  
                  private void sendNotification(String messageBody, String messageTitle, String user_id, String date, String hal_id, String M_view, String click_action) {
                      Intent intent = new Intent(click_action);
                      intent.putExtra("user_id", user_id);
                      intent.putExtra("date", date);
                      intent.putExtra("hal_id", hal_id);
                      intent.putExtra("M_view", M_view);
                  
                      PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent,
                              PendingIntent.FLAG_ONE_SHOT);
                  
                      Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
                      notificationBuilder.setSmallIcon(R.drawable.ic_launcher)
                              .setContentTitle(messageTitle)
                              .setContentText(messageBody)
                              .setAutoCancel(true)
                              .setSound(defaultSoundUri)
                              .setContentIntent(pendingIntent);
                  
                      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                      notificationManager.notify(0, notificationBuilder.build());
                  }}
                  

                  并在 onCreate 或 onResume 的新 NotificationReceive 活动中添加此

                  and in new NotificationReceive activity in onCreate or onResume add this

                      notification_Y_N = (TextView) findViewById(R.id.notification_Y_N);
                      user_id_text = (TextView) findViewById(R.id.user_id_text);
                  
                      Intent intent_o = getIntent();
                      String user_id = intent_o.getStringExtra("user_id");
                      String date = intent_o.getStringExtra("date");
                      String hal_id = intent_o.getStringExtra("hal_id");
                      String M_view = intent_o.getStringExtra("M_view");
                  
                      notification_Y_N.setText(date);
                      user_id_text.setText(hal_id);
                  

                  这篇关于Firebase (FCM):打开活动并在通知点击时传递数据.安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Firebase FCM 强制 onTokenRefresh() 被调用 下一篇:即使应用程序关闭(滑动/滑动)也能接收 GCM 通知

                  相关文章

                  <small id='zOsdS'></small><noframes id='zOsdS'>

                • <i id='zOsdS'><tr id='zOsdS'><dt id='zOsdS'><q id='zOsdS'><span id='zOsdS'><b id='zOsdS'><form id='zOsdS'><ins id='zOsdS'></ins><ul id='zOsdS'></ul><sub id='zOsdS'></sub></form><legend id='zOsdS'></legend><bdo id='zOsdS'><pre id='zOsdS'><center id='zOsdS'></center></pre></bdo></b><th id='zOsdS'></th></span></q></dt></tr></i><div id='zOsdS'><tfoot id='zOsdS'></tfoot><dl id='zOsdS'><fieldset id='zOsdS'></fieldset></dl></div>

                        <bdo id='zOsdS'></bdo><ul id='zOsdS'></ul>
                      <legend id='zOsdS'><style id='zOsdS'><dir id='zOsdS'><q id='zOsdS'></q></dir></style></legend>
                      <tfoot id='zOsdS'></tfoot>