当点击推送通知时,我该如何在我的Flutter应用程序中打开特定页面?

7
当点击推送通知时,如何在我的Flutter应用程序中打开特定页面?我已经创建了一个PHP脚本来推送FCM推送通知,但只是打开应用程序的前台页面...... 我希望推送通知携带日期,并打开我的应用程序中的日历页面,并显示通知的详细信息。
<?php

if(isset($_GET['send_notification'])){
   send_notification ();
}

function send_notification()
{
    echo 'Hello';
    define( 'API_ACCESS_KEY', 'Secret');
 //   $registrationIds = ;
   #prep the bundle
     $msg = array
          (
        'body'  => 'App New Event Notification',
        'title' => 'There is a new event added to the calendar',

          );
    $fields = array
            (
                'to'        => $_REQUEST['token'],
                'notification'  => $msg
            );


    $headers = array
            (
                'Authorization: key=' . API_ACCESS_KEY,
                'Content-Type: application/json'
            );
#Send Reponse To FireBase Server    
        $ch = curl_init();
        curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/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 );
        echo $result;
        curl_close( $ch );
}
?>
2个回答

15

在你的主页中,你可以处理 FCM 通知。

此外,请查阅Firebase文档。

首先,你需要格式化 JSON,这是我遵循的方式。

{  
   "notification": {
              "title": "Some title",
              "body": "Some text",
            },
            "data": {
              "title": "Some title",
              "body": "Some text",
              "click_action": "FLUTTER_NOTIFICATION_CLICK",
              "sound": "default",
              "status": "done",
              "screen": "OPEN_PAGE1",
              "extradata": "",
            }
}

firebaseMessaging.configure(
  onLaunch: (Map<String, dynamic> msg) {
    print("Called onLaunch");
    print(msg);
  },
  onResume: (Map<String, dynamic> msg) {
    //(App in background)
    // From Notification bar when user click notification we get this event.
    // on this event navigate to a particular page.
    print(msg);
    // Assuming you will create classes to handle JSON data. :)
    Notification ns =
          Notification(title: msg['title'], body: msg['body']);

      Data data = Data(
        clickAction: msg['click_action'],
        sound: msg['sound'],
        status: msg['status'],
        screen: msg['screen'],
        extradata: msg['extradata'],
      );
      switch (data.screen) {
  case "OPEN_PAGE1": 
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => Page1()
          ),
        );
    break;
  default:
    break;
  },
  onMessage: (Map<String, dynamic> msg) {
    // (App in foreground)
    // on this event add new message in notification collection and hightlight the count on bell icon.
    // Add notificaion add in local storage and show in a list.
    updataNotification(msg);
  },
);

1
很好,我的理解是我们需要将这些代码添加到main.dart中,然后就可以重定向到其他页面。如果我错了,请纠正我。 - Roxx
我仍在苦苦挣扎。 :( https://dev59.com/JL7pa4cB1Zd3GeqPznzY - Roxx

1
这对我很有帮助。将其放在初始化FirebaseApp和FirebaseMessaging之后即可解决问题。
var _message = await FirebaseMessaging.instance.getInitialMessage();

if (_message != null) {
  // DO THE ROUTING

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接