2012-07-28 20 views
10

मैं जीसीएम (Google क्लाउड मैसेजिंग) के माध्यम से एक संदेश भेजने की कोशिश कर रहा हूं। मैंने Google एपीआई के माध्यम से पंजीकरण किया है, मैं कई एंड्रॉइड टेस्ट फोन से अपनी वेबसाइट (जो एक Google ऐप इंजन बैकएंड है) में एक रेजीआईडी ​​भेज सकता हूं। हालांकि, मैं Google App Engine से जीसीएम को कुछ भी नहीं भेज सकता। यहां मैं उपयोग करने की कोशिश कर रहा हूं।Google क्लाउड मैसेजिंग HTTP त्रुटि 400: खराब अनुरोध

regId = "APA91b..." 

    json_data = {"collapse_key" : "Food-Promo", "data" : { 
        "Category" : "FOOD", 
        "Type": "VEG", 
       }, "registration_ids": [regId], 
    } 


    url = 'https://android.googleapis.com/gcm/send' 




    apiKey = "AI..." 
    myKey = "key=" + apiKey 

    headers = {'Content-Type': 'application/json', 'Authorization': myKey} 
    data = urllib.urlencode(json_data) 
    data2 = {"title": title} 
    data3 = urllib.urlencode(data2) 

    req = urllib2.Request(url, data, headers) 


    f = urllib2.urlopen(req) 
    response = f.read() 
    f.close() 

    logging.debug("***!!!!!!!WriteEntry TEST ----- Response: " + response) 

और यहां त्रुटि है जो मुझे प्राप्त हो रही है।

Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__ 
    handler.post(*groups) 
    File "/base/data/home/apps/s~journaltestza/26.360625174851783344/main.py", line 213, in post 
    f = urllib2.urlopen(req) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 124, in urlopen 
    return _opener.open(url, data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 387, in open 
    response = meth(req, response) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 498, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 425, in error 
    return self._call_chain(*args) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 360, in _call_chain 
    result = func(*args) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 506, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 400: Bad Request 

धन्यवाद!

उत्तर

9

डेटा 2 और डेटा 3 के लिए क्या उपयोग किया जाता है?

json_data = {"collapse_key" : "Food-Promo", "data" : { 
       "Category" : "FOOD", 
       "Type": "VEG", 
      }, "registration_ids": [regId], 
} 


url = 'https://android.googleapis.com/gcm/send' 
apiKey = "AI..." 
myKey = "key=" + apiKey 
data = json.dumps(json_data) 
headers = {'Content-Type': 'application/json', 'Authorization': myKey} 
req = urllib2.Request(url, data, headers) 
f = urllib2.urlopen(req) 
response = json.loads(f.read()) 
reply = {} 
if response ['failure'] == 0: 
    reply['error'] = '0' 
else: 
    response ['error'] = '1' 
return HttpResponse(json.dumps(reply), mimetype="application/javascript") 
1

python-gcm उपयोग करके देखें: डेटा आप पोस्ट कर रहे हैं उचित json ताकि आप json.dumps (डेटा) उपयोग करने की आवश्यकता .Code इस तरह होना चाहिए नहीं था। यह त्रुटियों को भी संभाल सकता है।

0

यहां बताया गया है कि मैंने इसे कैसे हल किया, लेकिन उपर्युक्त काम भी।

def sendGCM(self, regid, email, entry_id, date_modified, kind): 


    url = 'https://android.googleapis.com/gcm/send' 
    apiKey = _MY_API_KEY 
    myKey = "key=" + apiKey 

    json_data = { "registration_id": regid, "data" : { 
     "entry_id" : entry_id, 
     "email": email, 
     "date_modified": date_modified, 
     "kind": kind, 
     "reg_id": regid, 
     }, 
    } 

    ### Get regids 
    registration_data = { 
     "registration_ids": [regid], 
    } 

    headers = {'Content-Type': 'application/json', 'Authorization': myKey} 
    data = urllib.urlencode(json_data)    
    req = urllib2.Request(url, data) 
    req.add_header("Authorization", myKey)    

    f = urllib2.urlopen(req) 
    response = f.read() 
    f.close() 
+0

आप जेसन और सादे टेक्स्ट प्रारूपों के संयोजन का उपयोग कर रहे हैं। एक चुनें। http://developer.android.com/guide/google/gcm/gcm.html#server – Albert

संबंधित मुद्दे