Lumen ошибка в API push-уведомлений FCM - PullRequest
0 голосов
/ 12 мая 2018

Создать Api в люменах для push-уведомлений FCM. [numberTokensFailure: protected] => 7. Я использую эту библиотеку: https://github.com/brozot/Laravel-FCM

Отредактировано: если я передаю токен один за другим массив, то он работает, но в массиве он не работает. пожалуйста, проверьте мой код и дайте мне решение.

Код API:

public  function push_notification() {
                    $optionBuilder = new OptionsBuilder();
                    $optionBuilder->setTimeToLive(60*20);

                    $notificationBuilder = new PayloadNotificationBuilder('my title');
                    $notificationBuilder->setBody('Hello world')
                    ->setSound('default');

                    $dataBuilder = new PayloadDataBuilder();
                    $dataBuilder->addData(['a_data' => 'my_data']);

                    $option = $optionBuilder->build();
                    $notification = $notificationBuilder->build();
                    $data = $dataBuilder->build();

                    // You must change it to get your tokens
                    $tokens = Auth::select('token')->get()->toArray();

                    $downstreamResponse = FCM::sendTo($tokens, $option, $notification, $data);

                    $downstreamResponse->numberSuccess();
                    $downstreamResponse->numberFailure();
                    print_r($downstreamResponse);
                    $downstreamResponse->numberModification();

                    //return Array - you must remove all this tokens in your database
                    $downstreamResponse->tokensToDelete();

                    //return Array (key : oldToken, value : new token - you must change the token in your database )
                    $downstreamResponse->tokensToModify();

                    //return Array - you should try to resend the message to the tokens in the array
                    $downstreamResponse->tokensToRetry();

                    // return Array (key:token, value:errror) - in production you should remove from your database the tokens present in this array
                    $downstreamResponse->tokensWithError();
                }

1 Ответ

0 голосов
/ 17 мая 2018

Вам нужно перебрать массив токенов.

 $tokens = Auth::select('token')->get()->toArray();
 $numberOfSuccess = 0;
 $numberOfFailure = 0;
   if(count($tokens)>0){
        for ($index = 0; $index < count($tokens); $index++) {
                    $singleToken = array($tokens[$index]['token']);

                    $downstreamResponse = FCM::sendTo($singleToken, $option, $notification, $data);

                    $numberOfSuccess = $numberOfSuccess + $downstreamResponse->numberSuccess();
                    $numberOfFailure = $numberOfFailure + $downstreamResponse->numberFailure();      

            }
        }

Примечание: Это займет время, если у вас есть много токенов для отправки уведомления. Так что лучше использовать функциональность Laravel Queue Job.

...