2017-02-11 5 views
0

Google sagte FCM ist kostenlos. Was bedeutet das? Kann mir das jemand erklären?Firebase Cloud Messaging (mit App-Client)

enter image description here

registration_ids:

Dieser Parameter eine Liste der Geräte gibt (registration Token oder IDs) eine Multicast-Nachricht zu empfangen. Es muss mindestens 1 und höchstens 1000 Registrierungstoken enthalten.

Höchstens 1000? Was passiert, wenn ich 2000 Benutzer (Token) habe?

Ein weiteres Problem. Es gibt einen Fehler in meinem PHP-Skript, ich konnte nur Benachrichtigungen zu einem Token senden (oberste Zeile Token aus genommen), plse überprüfen Sie meine send.php:

Tabelle ist einfach nur 1 Spalte mit einer Liste von Token.

<?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); 
?> 

Bitte helfen, ich bin mit meinem Projekt fest.

+1

Bitte beschränken Sie sich auf eine Frage per Post. –

Antwort

0

Ja Firebase ist frei für FCM-Service.

registration_ids ist eine ID, die vom Gerät (Mobile) generiert und an den Server gesendet wird, wenn Ihre App Firebase verwendet.

Firebase verwenden diese ID und senden jede Art von Benachrichtigung an die Anzahl der Geräte.

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

Bitte überprüfen Sie unten das Beispiel und achten Sie auch auf Parameter, die an den FCM-Server gesendet werden. wie '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 überschreiben den obigen Code mit gegebenen Parametern, ich bin kein Erfahrung Entwickler, so dass es mich verwirren. $ Token (plse Auszug aus Tabelle table_name fcm mit 1 Spalte Token) $ title $ message (kein benötigen zusätzliche Daten mit Benachrichtigung zu übergeben) Verwendung Datenbank zu erhalten Token plse plse – wangz

+0

@wangz lesen Sie bitte bearbeiten. –

+0

plse exclude $ data (ich möchte keine Daten senden) .. stattdessen $ title (notification title) .. – wangz

Verwandte Themen