使用 php 向 ios 设备发送带有 fcm 令牌的远程通知

Posted

技术标签:

【中文标题】使用 php 向 ios 设备发送带有 fcm 令牌的远程通知【英文标题】:send remote notification with fcm token to ios device using php 【发布时间】:2020-03-20 06:13:39 【问题描述】:

我是 React Native 开发者,制作 ios 应用程序。

我正在努力实现使用 fcm 获取远程通知。

我们的后端开发人员使用php,他也是一名android开发人员。

所以他为fcm开发api的方式针对android进行了优化。

这是代码。

function sendFCM($notif_array, $id) 
    $API_KEY = "API key";
    $url = 'https://fcm.googleapis.com/fcm/send';

    $keys = array_keys($notif_array);
    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            // 'data' => array (
            //         "message" => $message,
            //         "type" => $notif_type
            // )
            'content_available'=>true,
            'priority'=>'high',
            'data' => $notif_array,
            'notification'=>array(
              "body"=>$notif_content
            )
    );
    $fields = json_encode ( $fields );

    $headers = array (
            'Authorization: key=' . $API_KEY,
            '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_POSTFIELDS, $fields );

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

我已经在 Firebase 控制台上注册了 APNs 密钥并对其进行了测试。它运行良好。

我正在从 firebase 收到测试云消息。

如你所知,react-native-firebase 上有几个与通知相关的功能

firebase.notifications().onNotification(notif => console.log(notif))
firebase.notifications().onNotificationDisplayed(notif => console.log(notif))
...
...
firebase.messaging().onMessage(message => console.log(message))

但现在只有 onMessage 函数在工作。

我猜 fcm 服务器只提供数据而不是通知。

如果有熟悉php的人,能否检查一下这段php代码是否正确?

谢谢!

【问题讨论】:

【参考方案1】:

在您的 sendFCM 方法中,变量 $notif_content 未定义。此外,我知道data 已被注释掉,但未注释,变量$notif_type 也不会被定义。

我知道让 FCM 与 iOS 一起工作可能会有点痛苦,以前我遇到过无效证书的问题,尽管我希望 Firebase 更有弹性,因为我不必将它用于几年。

【讨论】:

是的,我发现了这个问题,所以我告诉了我们的后端开发人员。他正在做其他工作,所以我希望在他解决这个问题后它会起作用。是的,notif_type 不再使用。我不知道他为什么保留这个,但他知道原因。感谢您的帮助!

以上是关于使用 php 向 ios 设备发送带有 fcm 令牌的远程通知的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 向 IOS 设备发送推送通知

通过向 FCM 单个设备发送通知来反应本机 Firebase iOS 生产无法正常工作

如何使用 C# 向所有设备发送带有图像的 FCM 通知?

如何使用 FCM 向 iOS 发送通知?

在应用程序被杀死后,使用 HTTP 请求通过 Firebase(FCM)向 iOS 设备发送推送通知 [重复]

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