2012-07-28 14 views
10

GCM(Google Cloud Messaging)でメッセージを送信しようとしています。私はGoogleのAPIを介して登録して、複数のAndroidのテスト用電話から私のウェブサイト(Google App Engineバックエンド)にregIDを送ることができます。 ただし、Google App EngineからGCMに何も送信できません。ここで私が使用しようとしているものがあります。Google Cloud Messaging 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

data2とdata3は何のために使用されますか?

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を使用してみてください:あなたは.CODEは、このようにする必要がありjson.dumps(データ)を使用する必要があるので、あなたが掲示されているデータが正しいJSONではなかったです。エラーを処理することもできます。

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

jsonとplaintext形式の組み合わせを使用しているようです。一つを選ぶ。 http://developer.android.com/guide/google/gcm/gcm.html#server – Albert

関連する問題