2017-08-25 13 views
1

Google Firebaseを使用して複数のデバイスにプッシュ通知を送信しようとしていますが、「InvalidRegistration」というエラーが表示されます。 マルチプルデバイスにプッシュを送信する際に無効な登録

この

は、私が「へ」

:json_encode($tokensPerEvent): 
["eV9g4oTwjZs:APA91bF3YLGtDkCDekvR6eahbVAn-jIY0sVGjxMWyBEyR- 
    3AB9q6RBhw4fyeqE4ZkZxQs0TsYhUee9Txy_exAGxtrBPV_- 
    sjKlWcV3z3nDYXOcVSVwlpPyGzUJKxGMU16drMR41bLI4t"] 

に送信されたトークンであり、これは応答である:

{ 
    "multicast_id":***, 
    "success":0, 
    "failure":1, 
    "canonical_ids":0, 
    "results":[ 
     { 
     "error":"InvalidRegistration" 
     } 
    ] 
} 

別の質問:トークンの一つはもう、この存在しない場合他のすべてのトークンに効果があるか、あるいは唯一の古いトークンが有効になりますか?

これは私のコードです:

<?php 
    require_once '../CommonFunctions.php'; 

    ignore_user_abort(); 
    ob_start(); 

    $url = 'https://fcm.googleapis.com/fcm/send'; 

    //GET TOKENS FROM DB 
    $db = new Database(); 
    $db->query("SELECT push_token FROM User"); 

    $db1 = new Database(); 
    $db1->query("SELECT phone FROM invite_list where event_id = 137"); 

    $response = $db->resultset(); 
    $response1 = $db1->resultset(); 

    $arr2 = array_column($response1, 'phone'); 
    $phones = join("','",$arr2); 

    $db2 = new Database(); 
    $db2->query("SELECT push_token FROM User WHERE phone IN ('$phones')"); 

    $tokensPerEvent = array(); 
    $tokensrr = $db2->resultset(); 
    $tokensPerEvent = array_column($tokensrr, 'push_token'); 

    echo json_encode($tokensPerEvent);  

    $fields = array('to' => json_encode($tokensPerEvent), 
    'notification' => array('body' => 'HI', 'title' => ':)')); 


    define('GOOGLE_API_KEY', '***********'); 

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

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

    $result = curl_exec($ch); 
    if($result === false) 
    die('Curl failed ' . curl_error()); 
    curl_close($ch); 
    return $result; 
?> 

答えて

1

あなたは彼らの登録IDにより多くのクライアントにプッシュ通知を送信する場合は、あなたの代わりにへのフィールドのregistration_idsを使用する必要があります。これはdocs(第2パラメータ)で見つけることができます。配列内のエンコーディング$tokensPerEventをスキップし

$fields = array('to' => json_encode($tokensPerEvent), ...

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

試してみてください:


また、トークンを2回エンコードする $fields = array('to' => $tokensPerEvent, ...

+0

私はそれを受け取りました - >フィールド "to"はJSON文字列でなければなりません:****** – Yakir

+0

@ Yakir Okey ...プッシュ通知をそれらの登録IDで多くのクライアントに送信したいですか? 次に、 'to'の代わりに' registration_ids'を使う必要があります これはドキュメントで見つけることができます...これを見つけることを試みますが、これは確かです。 編集:オキー、私はそれを見つけた。 2番目のパラメータhttps://firebase.google.com/docs/cloud-messaging/http-server-ref –

+0

私の一日を節約する!!!!ありがとう男!!!! – Yakir

関連する問題