How to parse GCM respond to remove invalid registration id from server with php

后端 未结 3 991
暗喜
暗喜 2020-12-29 10:20

I got a question about Google Cloud Messaging...

I send GCM to Google for 3 Registration IDs, then Google replies that 2 of the Registration IDs has been sent succes

3条回答
  •  爱一瞬间的悲伤
    2020-12-29 11:06

    Based on what I read here:

    http://developer.android.com/google/gcm/http.html#error_codes http://developer.android.com/google/gcm/server-ref.html#error-codes

    I've developed as follows (not tested yet):

    $result = $gcm->send_notification($registration_ids, $message);
    $jsonArray = json_decode($result);
    
    if($jsonArray->canonical_ids != 0 || $jsonArray->failure != 0){
        if(!empty($jsonArray->results))
        {
            for($i = 0 ; $iresults) ; $i++){
                $result = $jsonArray->results[$i];
                if(isset($result->message_id) && isset($result->registration_id))
                {
                    // You should replace the original ID with the new value (canonical ID) in your server database
                }
                else
                {
                    if(isset($result->error))
                    {
                        switch ($result->error)
                        {
                            case "NotRegistered":
                            case "InvalidRegistration":
                                // You should remove the registration ID from your server database
                                break;
                            case "Unavailable":
                            case "InternalServerError":
                                // You could retry to send it late in another request.
                                break;
                            case "MissingRegistration":
                                // Check that the request contains a registration ID
                                break;
                            case "InvalidPackageName":
                                // Make sure the message was addressed to a registration ID whose package name matches the value passed in the request.
                                break;
                            case "MismatchSenderId":
                                // Invalid SENDER_ID
                                break;
                            case "MessageTooBig":
                                // Check that the total size of the payload data included in a message does not exceed 4096 bytes
                                break;
                            case "InvalidDataKey":
                                // Check that the payload data does not contain a key that is used internally by GCM.
                                break;
                            case "InvalidTtl":
                                // Check that the value used in time_to_live is an integer representing a duration in seconds between 0 and 2,419,200.
                                break;
                            case "DeviceMessageRateExceed":
                                // Reduce the number of messages sent to this device
                                break;
    
                        }
                    }
                }
            }
        }
    }
    

提交回复
热议问题