2017-02-11 12 views
0

GoogleはFCMが無料だと言った。これはどういう意味です?誰もそれを説明できますか?firebaseクラウドメッセージング(アプリクライアントを使用)

enter image description here

registration_ids:

このパラメータは、マルチキャストメッセージを受信するデバイスのリスト(登録トークンまたはID)を指定します。少なくとも1つの登録トークンを含む必要があります。

最大1000?もし私が2000人のユーザー(トークン)を持っていたら?

もう1つ問題があります。私のPHPスクリプトでいくつかの間違いがある、私は1つのトークン(取ってから一番上の行のトークン)、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

投稿ごとに1つの質問に自分自身を制限してください。 –

答えて

0

はいFCMサービスの場合、Firebaseは無料です。

registration_idsは、Firebaseを使用しているアプリの場合、デバイス(モバイル)によって生成されてサーバーに送信されるIDです。

FirebaseはそのIDを使用して、デバイスの数に任意のタイプの通知を送信します。

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 1列トークンを持つテーブルtable_nameのFCMから取り出す) $タイトル $メッセージ (無通知で、余分なデータを渡す必要があるため) 使用データベーストークン PLSE PLSE – wangz

+0

@wangzを取得するには、[編集]を確認してください。 –

+0

plseは$ data(データを送信したくない)を除外します..代わりに$ title(通知のタイトル)を含みます.. – wangz

関連する問題