【问题标题】:How to send Notifications to Android App with Firebase Cloud Messaging with AppEngine Python如何使用 Firebase Cloud Messaging 和 AppEngine Python 向 Android 应用程序发送通知
【发布时间】:2017-11-14 11:51:07
【问题描述】:

这是我第一次在 stackoverflow 上发布问题,所以我会尽力以清晰的方式扩展我的问题。我一直在努力寻找答案,但目前陷入困境,因此非常感谢您提供的任何见解。

我正在尝试向我开发的 Android 应用发送 FCM 消息。我遵循了 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”代码。

根据我如何格式化请求,有时我会被重定向到 https://firebase.google.com/docs/cloud-messaging/http-server-ref 的“Firebase 云消息传递 HTTP 协议”网页告诉我,我走在正确的轨道上。

接下来,为了获得一些见解,我尝试从名为 Advanced REST Client (ARC) 的 Chrome 应用程序发送通知,该应用程序允许我构建 HTTP 请求并转发到 FCM 服务器。

这是我发送到 FCM 服务器的示例:

内容类型:应用程序/json 授权:key=AIzaSyDhIji4X6h0........2zo

{"to": "AIzaSyAqv4hjGC1Z5........cfSRU_gXyQ", “数据”: { "message": "这是一条 Firebase 云消息传递主题消息!", }}

我收到以下回复:

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

我确信我遗漏了一些简单的东西,但作为 AppEngine 和 Firebase 的新手,我不确定我哪里出错了。

【问题讨论】:

    标签: android python google-app-engine firebase firebase-cloud-messaging


    【解决方案1】:

    好吧,经过进一步调查,答案(和往常一样)就在我的眼皮底下,但不是那么明显。

    在我的测试中,我使用的是 Firebase/Google 分配的旧版服务器密钥,而不是他们推荐的新版服务器密钥——尽管它在 Firebase 控制台/Messenger 部分明确指出它仍然可用。插入新密钥后,一切都按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2017-01-05
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多