2017-08-25 1 views
1

Ich versuche, Push-Benachrichtigungen an mehrere Geräte mit Google Firebase zu senden und habe immer den Fehler "InvalidRegistration" erhalten.UngültigeRegistrierung beim Senden von Push an mehrere Geräte

Dies ist die Token, die ich in der „auf“

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

und dies ist die Antwort gesendet:

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

weitere Fragen: Wenn die eine der Token existieren nicht mehr, diese wirkt sich das auf alle anderen Token aus, oder nur der einzig alte?

Dies ist mein Code:

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

Antwort

1

Wenn Sie Push-Benachrichtigung auf viele Kunden durch ihre Registrierung ids senden möchten, müssen Sie registration_ids statt zu Feld verwenden. Sie finden dieses unter docs (zweiter Parameter).


Sie kodieren auch Token zweimal:

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

und

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

Versuchen durch Codierung $tokensPerEvent in Array-Skipping: $fields = array('to' => $tokensPerEvent, ...

+0

wenn ich das mache ich bin erhalten -> Feld "zu" muss eine JSON-Zeichenfolge sein: ****** – Yakir

+0

@Yakir Okey ... Sie möchten Push-Benachrichtigung an viele Clients durch ihre Registrierungs-IDs senden? Dann müssen Sie 'registration_ids' anstelle von' to' verwenden Sie können dies in docs finden ... Ich werde versuchen, dies zu finden, aber ich bin mir ziemlich sicher, dass dies ist. EDIT: Okey, ich habe es gefunden. Zweiter Parameter https://firebase.google.com/docs/cloud-messaging/http-server-ref –

+0

Sie sparen meinen Tag !!!! Danke Männer !!!! – Yakir

Verwandte Themen