1

這是我第一次發佈一個問題到stackoverflow,所以我會盡我所能以明確的方式擴展我的問題。我試圖找到一個答案擊敗了我的頭,但我目前陷入困境,所以提供的任何見解都將不勝感激。如何使用AppEngine將Firebase Cloud消息發送到Android應用程序Python

我想將FCM消息發送到我開發的Android應用程序。我遵循Android快速入門教程:https://firebase.google.com/docs/cloud-messaging/android/client

我可以從Firebase雲訊息撰寫器向我的應用程序發送通知消息,並且通知已被應用程序正確接受,並且當應用程序可見時,會將數據有效載荷加載到一個簡單的Activity - > TextView。

現在,我試圖使用基於Webapp2框架的Python SDK推送來自Google App Engine服務器應用程序的通知,但我不清楚如何執行此操作。

在RequestHandler中,我想將從POST請求接收的數據推送到通知。我已經寫了一些基本的代碼,試圖做到這一點:

class SendDetails(webapp2.RequestHandler): 
def post(self): 
    url = 'https://fcm.googleapis.com/fcm/send' 
    body = { 
     "data": { 
      "title": "mytitle", 
      "body": "mybody", 
      "url": "myurl" 
     }, 
     "notification": { 
      "title": "My web app name", 
      "body": "message", 
      "content_available": "true" 
     }, 
     "to": "AIzaSyAqv4hjGC1Z5.......XyQ", 
    } 

    headers = {"Content-Type": "application/json", 
       "Authorization": "AIzaSyDhIji4X6h0VQwor.......lrr2zo"} 

    try: 
     form_data = urllib.urlencode(body) 

     headers = {"Content-Type": "application/json", 
        "Authorization": "key=AIzaSyDhI.......mOUXlrr2zo"} 
     result = urlfetch.fetch(
      url='https://fcm.googleapis.com/fcm/send', 
      payload=form_data, 
      method=urlfetch.POST, 
      headers=headers) 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.write(result) 
    except urlfetch.Error: 
     logging.exception('Caught exception fetching url') 

當我運行dev_appserver的代碼,並通過瀏覽器觸發RequestHandler,我得到一個「POST HTTP/1.1 200 68」響應。我不確定如何解釋「68」代碼。

根據我如何格式化請求,有時我會重定向到 「Firebase雲消息傳遞HTTP協議」網頁https://firebase.google.com/docs/cloud-messaging/http-server-ref,它告訴我我正處於正確的軌道上。

接下來,爲了獲得一些見解,我嘗試從名爲Advanced REST Client(ARC)的Chrome應用程序發送通知,該通知允許我構建HTTP請求並轉發到FCM服務器。

這裏是什麼,我發送到服務器FCM一個例子:

內容類型:應用程序/ JSON 授權:鍵= AIzaSyDhIji4X6h0 ........ 2zo

{「到「: 「AIzaSyAqv4hjGC1Z5 ........ cfSRU_gXyQ」, 「數據」:{ 「消息」: 「這是一個火力地堡雲消息傳遞主題信息」, }}

我獲得以下響應:

{ 
"multicast_id": 
7345322951926226000 
, 
"success": 0, 
"failure": 1, 
"canonical_ids": 0, 
"results": [ 
    { 
"error": "InvalidRegistration" 
} 
], 
} 

我相信我錯過了一些簡單的東西,但作爲AppEngine和Firebase的新手,我不確定自己出錯的地方。

回答

0

那麼,經過更多的調查後,答案是(像往常一樣)在我的鼻子下,但並不那麼明顯。

對於我的測試,我使用的是由Firebase/Google分配的舊服務器密鑰,而不是他們推薦的舊密鑰服務器密鑰 - 儘管它在Firebase控制檯/ Messenger部分明確指出它仍然可用。只要我插入新鑰匙,一切都按預期工作。

相關問題