使用php发送fcm通知和消息

时间:2020-03-18 10:01:50

标签: php react-native react-native-firebase

我正在努力使用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 );
}

1 个答案:

答案 0 :(得分:1)

您应该在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();
    }
}