FCM 将消息从 php 复制到 iOS Flutter 应用程序

Posted

技术标签:

【中文标题】FCM 将消息从 php 复制到 iOS Flutter 应用程序【英文标题】:FCM duplicated messages from php to iOS flutter app 【发布时间】:2020-05-08 08:46:25 【问题描述】:

我将 Firebase Cloud Message 用于 Flutter 应用。

我尝试使用 php 代码触发推送通知。它给了我一个成功:1 个结果,但在我的设备上,我总是收到 2 条标题和正文相同但消息 ID 不同的消息(由 google firebase 提供)。

我仔细检查过,我只在服务器端触发了一次此功能。

我在服务器上的代码

$url = 'https://fcm.googleapis.com/fcm/send';
$msg = array
    (
          'body'  => $message,
          'title' => $title,
                  'badge' => 1,/*Default sound*/
                  'sound' => 'default',
    );
$fields = array
        (
            'registration_ids' => $id,
            'notification'  => $msg
        );

$fields = json_encode ( $fields );

$apiKey = 'XXXXXXX'; //ios

$headers = array (
        'Authorization: key='.$apiKey,
        'Content-Type: application/json'
);

$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
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, $fields );

$result = curl_exec ( $ch );
curl_close ( $ch );
    echo $result;

我试图从终端触发它,它运行良好,并且只发送了 1 条消息。我的终端代码:

DATA='"notification": "body": "this is a body","title": "this is a title", "priority": "high", "data": "click_action": "FLUTTER_NOTIFICATION_CLICK", "id": "1", "status": "done", "to": "MYDEVICETOKEN"'
curl https://fcm.googleapis.com/fcm/send -H "Content-Type:application/json" -X POST -d "$DATA" -H "Authorization: key=XXXXXXXXX"    

【问题讨论】:

你好,面临同样的问题。你发现问题了吗? 您是否尝试在网络浏览器中调用? Chrome 会触发两次代码,这就是消息重复的原因。 【参考方案1】:

目前这似乎是一个颤振问题。 作为现在的解决方法,您可以创建一个布尔值并像这样触发它:

class _SomethScreenState extends State<SomeScreen> 

  bool onNotificationTrigger = false;
...

_fcm.configure(
      onMessage: (Map<String, dynamic> response) async 
        setState(() 
          onNotificationTrigger = !onNotificationTrigger;

          if (onNotificationTrigger)
           // Do Something
        );
      ,
...

【讨论】:

【参考方案2】:

我遇到了类似的问题,但它是在 React-native 中。也许它可以帮助你。问题在于有两个服务负责在 androidManifest 中接收通知\消息。

【讨论】:

不幸的是,我在 iOS 设备上也遇到了这个问题。【参考方案3】:

对我来说,升级到:

Flutter 版本 1.17.5 Firebase_messaging:^6.0.16

【讨论】:

以上是关于FCM 将消息从 php 复制到 iOS Flutter 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

带图像的 PHP-iOS 推送通知

FCM 上游消息传递的可靠性如何?

Firebase Cloud Message (FCM):尝试从 PHP 向设备发送消息(错误:InvalidRegistration)

为啥没有通过 Firebase FCM 从 Web API 定向到特定 iOS 设备的推送通知?

IOS 应用程序中的 Firebase 云消息传递 (FCM) 无法正常工作

是否可以使用 Firebase 云消息传递 (FCM) 直接从设备将 PushNotifications 发送到特殊的 UDID?