繁体   English   中英

如何使用AppEngine Python通过Firebase Cloud Messaging将通知发送到Android应用程序

[英]How to send Notifications to Android App with Firebase Cloud Messaging with AppEngine Python

这是我第一次向stackoverflow发帖提问,所以我会尽力以明确的方式扩展我的问题。 我试图找到一个答案时,我的头撞在了墙上,但我目前陷入困境,所以提供的任何见解都会非常感激。

我正在尝试将FCM消息发送到我开发的Android应用程序。 我按照Android快速入门教程进行了操作: https//firebase.google.com/docs/cloud-messaging/android/client

我可以从Firebase Cloud Messenging编辑器向我的应用程序发送通知消息,并且应用程序正确接受通知,当应用程序可见时,将数据有效负载加载到一个简单的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服务器的示例:

内容类型:application / json授权:key = AIzaSyDhIji4X6h0 ........ 2zo

{“to”:“AIzaSyAqv4hjGC1Z5 ........ cfSRU_gXyQ”,“data”:{“message”:“这是Firebase云消息传递主题消息!”,}}

我收到以下回复:

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

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

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

对于我的测试,我使用的是Firebase / Google分配的旧服务器密钥而不是他们推荐的新密钥 - 即使它在Firebase控制台/ Messenger部分中明确说明它仍然可用。 一旦我插入新密钥,一切都按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM