web-dev-qa-db-fra.com

Envoi de notifications Firebase Push depuis Laravel

J'écris une application iOS, en utilisant laravel pour l'API et google firebase pour les notifications Push. Lorsque j'envoie une notification Push en utilisant la messagerie cloud Firebase, elle arrive sur mon appareil. Lorsque j'envoie des notifications Push en utilisant laravel, cela n'affecte pas. Voici mon script pour envoyer des notifications Push depuis laravel:

function sendNotification(Request $request)
{
    $friendToken = [];
    $usernames = $request->all()['friend_usernames'];
    $dialog_id = $request->all()['dialog_id'];
    foreach ($usernames as $username) {
        $friendToken[] = DB::table('users')->where('user_name', $username)
            ->get()->pluck('device_token')[0];
    }

    $url = 'https://fcm.googleapis.com/fcm/send';
    foreach ($friendToken as $tok) {
        $fields = array(
            'to' => $tok,
            'data' => $message = array(
                "message" => $request->all()['message'],
                "dialog_id" => $dialog_id
            )
        );
        $headers = array(
            'Authorization: key=*mykey*',
            '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_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
        curl_exec($ch);
        curl_close($ch);
    }

    $res = ['error' => null, 'result' => "friends invited"];

    return $res;
}

Il renvoie un résultat réussi, mais aucune notification n'est envoyée aux appareils iOS.

PS: cela fonctionne avec succès sur les appareils Android.

6
Levan Karanadze

Après quelques recherches, j'ai trouvé une solution à ma question. Afin de fonctionner pour la plate-forme iOS, nous devons ajouter une notification dans les champs:

$notification = array('title' =>"" , 'text' => $request->all()['message']);
$fields = array(
    'to' => $tok,
    'data' => $message = array(
        "message" => $request->all()['message'],
        "dialog_id" => $dialog_id
    ),
    'notification' => $notification
);
2
Levan Karanadze