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