2016-04-25 4 views
2

Wie ich hier beziehe Android GCM messages repeated das Problem war ich installieren und installieren Sie die App viele Male, so dass es viele regId hat. Ich habe viele Beiträge gefunden, um Canonical ID zu verwenden. Ich habe viele Beiträge gelesen, kann aber nicht wirklich wissen, wie ich es anwenden soll. Hier ist mein Code zu bekommen regId:Android mit Canonical ID GCM

public String getRegId(){ 
      int noOfAttemptsAllowed = 3; // Number of Retries allowed 
       int noOfAttempts = 0;   // Number of tries done 
       boolean stopFetching = false;  // Flag to denote if it has to be retried or not 
       String regId = "";    


       while (!stopFetching) 
       { 
        noOfAttempts ++; 
        try { 
         regId = gcm.register(PROJECT_NUMBER); 
       } catch (IOException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
        try 
        { 

         Thread.sleep(4000); // Set this timing based on trial. 

         try { 
          regId = gcm.register(PROJECT_NUMBER); 
        } catch (IOException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 
       } catch (InterruptedException e) { 
       e.printStackTrace(); 
       } 
        /* try 
        { 
         // Get the registration ID 
         regId = gcm.register(PROJECT_NUMBER); 
        } catch (Exception e) {}*/ 


        if (!regId.equals("") || noOfAttempts > noOfAttemptsAllowed) 
        { 
         // If registration ID obtained or No Of tries exceeded, stop fetching 
         stopFetching = true; 
        } 
        if (!regId.equals("")) 
        { 
         // If registration ID Obtained, save to shared preferences 
          SharedPrefrencesMethods.savePreferences(activity, "regid", regid); 
        } 


       } 
       return regId; 
     } 

Antwort

2

Ja. Sie können kanonische IDs verwenden, um leichter von Ihren Fehlern zu erholen. Es ist das Registrierungs-Token der letzten Registrierung, die von der Client-App angefordert wurde. Dies ist die ID, die der Server beim Senden von Nachrichten an das Gerät verwenden soll.

Wenn Sie versuchen, eine Nachricht zu senden, eine alte Registrierungstoken verwenden, wird GCM die Anfrage wie gewohnt verarbeiten, aber es wird die kanonische ID in der registration_id field der Antwort enthalten. Stellen Sie sicher, dass das Registrierungstoken, das auf Ihrem Server gespeichert ist, durch diese kanonische ID ersetzt wird, da das alte Registrierungstoken schließlich nicht mehr funktioniert.

Basierend auf dieser blog, gibt der GCM-Dienst die kanonischen IDs in den Bestellbenachrichtigungen zurück. Hier ist ein Beispiel Antwort:

{ 
    "multicast_id": 7036866281258904189, 
    "success": 1, 
    "failure": 0, 
    "canonical_ids": 1, 
    "results": [ 
     { 
      "registration_id": "CANNONICAL_REGISTRATION_ID", 
      "message_id": "0:1415529915241995%64ac3713f9fd7ecd" 
     } 
    ] 
} 

Die kanonische id = 0 bedeutet, dass Registrierungs-ID, die Ihre Push-Sever verwendet wird, ist in Ordnung und nicht sollte durch kanonische ID ersetzt werden, das heißt oft GCM Serverantwort canonical_id sein wird = 0. In der Beispielantwort gibt es eine kanonische ID und das bedeutet, dass Ihr Server die bestehende Registrierungs-ID für den neuen Wert, den Sie als Antwort sehen, ersetzen muss. Dieser Fall kann leicht reproduziert werden, wenn der Benutzer seine Client-Anwendung neu installiert, aber Ihr Push-Server weiß nichts darüber und der GCM-Server wird als Antwort eine neue Registrierungs-ID übergeben.

diese verwandten SO Fragen zu Canonical-IDs prüfen:

+0

Okay dank dir jetzt verstehe ich, aber ich habe kleines Problem, das ich weiß nicht, wo Server empfangen Antwort auf welche Methode ich meine onHandleIntent intent Methode habe ich versucht, die Nachricht selbst nur zu bekommen? – Radwa

+0

Hallo ich mange, um die Antwort vom Server zu erhalten und kanonische Ids zu erhalten, aber ich fand viele kanonische ID welche ich verwenden sollte das ist Teil der JSON Antwort {"Erfolg": 17, "Fehler": 15, "canonical_ids": 16 } – Radwa