2017-02-11 5 views
0

Google сказал, что FCM является бесплатным. Что это значит? Может ли это объяснить?firebase cloud messaging (с помощью приложения-клиента)

enter image description here

registration_ids:

Этот параметр определяет список устройств (регистрационные маркеры, или идентификаторы) приема многоадресной сообщение. Он должен содержать не менее 1 и не более 1000 регистрационных токенов.

Не более 1000? Что делать, если у меня 2000 пользователей (токенов).

Еще одна проблема. есть некоторая ошибка в моем скрипте php, я могу только отправлять нотификацию на один токен (верхняя часть маркера из взятой строки), plse проверить мой send.php:

таблица проста только 1 столбец со списком токенов.

<?php 
require "info.php"; 
$message = $_POST["message"]; 
$title = $_POST["title"]; 
$path_to_fcm = "https://fcm.googleapis.com/fcm/send"; 
$server_key = "*******************************"; 
$sql="select token from fcm"; 
$result = mysqli_query($con,$sql); 
$column = mysqli_fetch_row($result); 

$key=$column[0]; 

$headers=array('Authorization:key=' .$server_key, 
'content-Type:application/json'); 

$fields=array('registration_ids'=>$key, 
'notification'=>array('title'=>$title,'body'=>$message)); 

$payload = json_encode($fields); 
$curl_session = curl_init(); 
curl_setopt($curl_session, CURLOPT_URL, $path_to_fcm); 
curl_setopt($curl_session, CURLOPT_POST, true); 
curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
curl_setopt($curl_session, CURLOPT_POSTFIELDS, $payload); 
$result=curl_exec($curl_session); 
curl_close($curl_session); 
mysqli_close($con); 
?> 

Пожалуйста, помогите, я застрял в своем проекте.

+1

Пожалуйста, ограничитесь одним вопросом за сообщение. –

ответ

0

Да Firebase предоставляется бесплатно для службы FCM.

registration_ids - это идентификатор, который генерируется устройством (Mobile) и отправляется на сервер, если ваше приложение использует Firebase.

Firebase использует этот идентификатор и отправляет любые уведомления на количество устройств.

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 

    private static final String TAG = "MyFirebaseIIDService"; 

    /** 
    * Called if InstanceID token is updated. This may occur if the security of 
    * the previous token had been compromised. Note that this is called when the InstanceID token 
    * is initially generated so this is where you would retrieve the token. 
    */ 
    // [START refresh_token] 
    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 

     // TODO: Implement this method to send any registration to your app's servers. 
     sendRegistrationToServer(refreshedToken); 
    } 
    // [END refresh_token] 

    /** 
    * Persist token to third-party servers. 
    * 
    * Modify this method to associate the user's FCM InstanceID token with any server-side account 
    * maintained by your application. 
    * 
    * @param token The new token. 
    */ 
    private void sendRegistrationToServer(String token) { 
     // Add custom implementation, as needed. 
    } 
} 
1

Пожалуйста, ознакомьтесь с приведенным ниже примером, а также позаботьтесь о параметрах, отправленных на сервер FCM. 'to', 'notification', 'data'

$registrationIds=array(); 

//select user RegistrationIDs/Token from DB 
$con=mysqli_connect("localhost","my_user","my_password","my_db"); 
$sql="SELECT `reg_id` from users;"; 
$result=mysqli_query($con,$sql); 
while($row = mysqli_fetch_assoc($result)) { 
    array_push($registrationIds,$row["reg_id"]); 
} 
mysqli_close($con); 


$msg = array(
    'body' => "My First Blog Description", 
    'title' => "My First Blog" 
); 

$noti_key='YOUR_FCM_REGISTRATION_KEY'; 

$registrationIds_chunk=array_chunk($registrationIds,1000); 
foreach($registrationIds_chunk as $single_chunk){ 
    if(count($single_chunk)==1){ 
     $fields = array 
     (
      'to'=>$single_chunk[0], 
      'notification'=> $msg 
     ); 
    }else{ 
     $fields = array 
     (
      'registration_ids'=>$single_chunk, 
      'notification'=> $msg 
     ); 
    } 

    $headers = array 
    (
     'Authorization: key='.$noti_key, 
     'Content-Type: application/json' 
    ); 

    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
    curl_setopt($ch,CURLOPT_POST, true); 
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields, true)); 
    $result = curl_exec($ch); 
    curl_close($ch); 
} 
+0

Plse переписывает вышеприведенный код с заданными параметрами, я не являюсь разработчиком опыта, поэтому он меня путает. $ лексемы (Plse извлечь из таблицы table_name ТСМА с 1 колонкой лексем) $ заголовка $ сообщения (не понадобится передать дополнительные данные с уведомлением) использования базой данных, чтобы получить жетоны Plse Plse – wangz

+0

@wangz пожалуйста, просмотрите изменения. –

+0

plse исключить $ data (я не хочу отправлять данные) .. вместо этого включить $ title (название уведомления). – wangz

Смежные вопросы