1

ここで、 Django を使用して Android デバイスにプッシュ通知を送信する方法を見つけました(ここにコードがあります)。

それを採用すると、私のコードは次のようになります。

def sendAndroidPushNotification(registration_id, collapse_key, a, b) :
    try:
        auth = getNewAndroidAuthorizationToken() # this works I'm fetching new token so this is up to date (its length is 267 characters)
        push_request = urllib2.Request("https://android.apis.google.com/c2dm/send")

        data = urllib.urlencode({'data.testA'     : a,
                                 'data.testB'     : b,
                                 'collapse_key'   : collapse_key,
                                 'registration_id': registration_id
                                 })
        push_request.add_data( data )
        push_request.add_header('Authorization', 'GoogleLogin auth=' + auth)
        push_request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        push_request.add_header('Content-Length', len(data))
        urllib2.build_opener().open(push_request)

    except urllib2.HTTPError as e:
        print 'got exception during push notification'
        print 'Reason: "{0}" code: {1}'.format(e.reason, e.code)

        pass

これにより、「理由:「認証されていません」コード:401」というエラーが表示されます(ある時点で403でした)。urllib2.Requestの代わりにhttplib.HTTPSConnectionを使用するバージョンにも同じ問題があります。

ここに示されているコードとほぼ同じに見えるので、完全に混乱しています。私が間違っていることは何ですか?


編集:

念のため、認証トークンを取得する方法を次に示します (正常に動作しているように見えます)。解析が間違っている可能性があります。

def getNewAndroidAuthorizationToken() :
    request = urllib2.Request("https://www.google.com/accounts/ClientLogin")

    data  = urllib.urlencode({'accountType' : 'HOSTED_OR_GOOGLE',
                              'Email'       : 'someaccount@gmail.com',
                              'Passwd'      : 'asdjsdfa',
                              'service'     : 'ac2dm',
                              'source'      : 'com.mycompany.mypackage',})
    request.add_data(data)

    content = urllib2.build_opener().open(request)

    lines = content.readlines()
    for line in lines :
        if line.find("Auth=")==0 :
            return line[5:]
    return
4

1 に答える 1

2

C2DM廃止されました。開発者はGCM, C2DM、短期間サポートされる に切り替えることをお勧めします。サポートされていないClientLoginおよびの代わりの単純な API 。oAuth2

http://developer.android.com/guide/google/gcm/index.html

于 2012-06-29T11:20:51.337 に答える