success = []; $output->invalid = []; $output->needUpdate = []; $url = 'https://fcm.googleapis.com/fcm/send'; $api_key = $this->_config['api_key']; $headers = array( 'Authorization' => 'key=' . $api_key, 'Content-Type' => 'application/json', ); // Set notification $notification = $message->getMetadata(); $notification['title'] = $message->getSubject(); $notification['body'] = $message->getContent(); $notification['sound'] = isset($notification['sound']) ? $notification['sound'] : 'default'; $chunked_token = array_chunk($tokens, 1000); foreach($chunked_token as $token_unit) { $data = json_encode(array( 'registration_ids' => $token_unit, 'notification' => $notification, 'priority' => 'normal', 'data' => $message->getData() ?: new \stdClass, )); $response = \FileHandler::getRemoteResource($url, $data, 5, 'POST', 'application/json', $headers); if($response) { $decoded_response = json_decode($response); if(!$decoded_response) { $message->addError('FCM return invalid json : '. $response); return $output; } $results = $decoded_response->results ?: []; foreach($results as $i => $result) { if($result->error) { $message->addError('FCM error code: '. $result->error); $output->invalid[$token_unit[$i]] = $token_unit[$i]; } else if($result->message_id && $result->registration_id) { $output->needUpdate[$token_unit[$i]] = $result->registration_id; } else { $output->success[$token_unit[$i]] = $result->message_id; } } } else { $message->addError('FCM return empty response.'); } } return $output; } }