首页 > 解决方案 > 使用 php 发送 fcm 通知和消息

问题描述

我正在努力使用 react-native-firebase 实现通知

onNotification 函数根本没有被调用,所以我几乎疯了。

但我认为这可能是服务器问题。

所以我要求我们的 php 后端开发人员给我与 fcm 通知相关的服务器代码。

我认为他似乎只发送消息而不是通知。

如果是对的,我怎么能告诉他修复这个功能。如果不是,我不知道该怎么办了..

请帮助我了解这方面的知识!

谢谢你们!

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

    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            // 'data' => array (
            //         "message" => $message,
            //         "type" => $notif_type
            // )
            'content_available'=>true,
            'priority'=>'high',
            'data' => $notif_array
    );
    $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 );
}

标签: phpreact-nativereact-native-firebase

解决方案


您应该在 php 端添加此代码:

function sendFCM($notif_array, $id) {
    $API_KEY = "api_key";
    $url = 'https://fcm.googleapis.com/fcm/send';
    $message = [
        'body'              =>  'Hello, This is a notification.',
        'title'             => 'Your Title',
        'notification_type' =>  'Test'
    ];

    $notification = [
        'body' => 'Hello, This is a notification.',
        'title' => 'Your Title',

    ];
    $fields = array (
        'registration_ids' => array (
                $id
        ),
        'notification'      => $notification,
        'data'              => $message,
        'priority'          => 'high',            
    );
    $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 );

    curl_close ( $ch );
    return 'success';
}

对于IOS:

 function iospush( $id ) {
    $msg = 'Test notification';
    $host = 'gateway.push.apple.com'; /Here is ecample */
    $passphrase = YourIOSpassphrase;
    $ios_notifiaction_certificate = '/add full path where ios certiticate stay';
    try {
        $streamContext = stream_context_create();

        stream_context_set_option( $streamContext, 'ssl', 'local_cert', $ios_notifiaction_certificate );
            stream_context_set_option( $streamContext, 'ssl', 'passphrase', $passphrase);
            $apns = stream_socket_client( 'ssl://'.$host, $error, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext );


        $payload[ 'aps' ] = array( 'alert' => $msg, 'badge' => '0', 'sound' => 'default', 'notification_type' =>  'Test' );

        $payload = json_encode( $payload );

        $apnsMessage = chr(0) . pack( 'n', 32 ) . pack( 'H*',  $id ) . pack( 'n', strlen( $payload ) ) . $payload;

        $fwriteRes = fwrite( $apns, $apnsMessage, strlen( $apnsMessage ) );

        fclose( $apns );
        return 'Success';
    } catch( Exception  $e ) {
        return true;           
        // return $e->getMessage();
    }
}

推荐阅读