如何使用Python创建服务器以使用GCM向Android设备发送推送通知

来自菜鸟教程
跳转至:导航、​搜索

介绍

推送通知让您的 Android 应用程序通知用户事件,即使用户没有使用您的应用程序。 本教程的目标是向您的应用程序发送一个简单的推送通知。 我们将在服务器上使用 Ubuntu 14.04Python 2.7,并使用 Google Cloud Messaging 作为推送通知服务。

我们将使用术语 server 来指代使用 DigitalOcean 启动的实例。 我们将使用 GCM 来指代 Google 的服务器,它位于 Android 设备和您的服务器之间。

先决条件

在开始本教程之前,您将需要这些东西:

  • 一个Android应用; 参见 developer.android.com
  • 一个Ubuntu 14.04 Droplet
  • 您的 Droplet 的 IP 地址

关于推送通知

Google 提供的 GCM 连接服务器从第三方应用程序服务器(例如您的 Droplet)获取消息,并将这些消息发送到设备上运行的支持 GCM 的 Android 应用程序(客户端应用程序)。 目前,Google 为 HTTP 和 XMPP 提供连接服务器。

换句话说,您需要自己的服务器与 Google 的服务器通信才能发送通知。 您的服务器将消息发送到 GCM(Google 云消息传递)连接服务器,然后连接服务器将消息排队并存储,然后在设备在线时将其发送到 Android 设备。

第一步——创建一个 Google API 项目

我们需要创建一个 Google API 项目来为我们的应用启用 GCM。

访问 Google 开发者控制台

如果您从未在那里创建过开发者帐户,则可能需要填写一些详细信息。

单击创建项目

输入项目名称,然后单击创建

等待几秒钟以创建新项目。 然后,在项目页面的左上角查看您的项目ID项目编号

记下 项目编号 。 您将在您的 Android 应用程序客户端中使用它。

第二步 - 为您的项目启用 GCM

确保您的项目仍然在 Google Developers Console 中被选中。

在左侧边栏中,选择 API 和身份验证 .

选择 API

在显示的 API 列表中,将 Google Cloud Messaging for Android 切换到 ON。 接受服务条款。

Google Cloud Messaging for Android 现在应该在此项目的启用 API 列表中。

在左侧边栏中,选择 API 和身份验证 .

选择 凭据

公共API访问下,点击新建密钥

选择服务器密钥

输入您的服务器的 IP 地址。

单击创建

复制 API KEY。 稍后您需要在服务器上输入此内容。

第三步——链接安卓应用

为了测试通知,我们需要将我们的 Android 应用程序链接到我们创建的 Google API 项目。

如果您是 Android 应用程序开发的新手,您可能需要遵循 实施 GCM 客户端 的官方指南。

您可以从gcm页面获取官方源代码。

请注意,源不是更新,因此您必须修改 Gradle 文件:

gcm-client/GcmClient/build.gradle

旧线:

compile "com.google.android.gms:play-services:4.0.+"

更新行:

compile "com.google.android.gms:play-services:5.0.89+"

在主要活动中,找到此行:

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

将其替换为您的 Google API 项目中的 Project Number

每次设备向 GCM 注册时,它都会收到一个注册 ID。 我们将需要此注册 ID 来测试服务器。 为了轻松获得它,只需在主文件中修改这些行:

            if (regid.isEmpty()) {
                registerInBackground();
            }else{
                Log.e("==========================","=========================");
                Log.e("regid",regid);
                Log.e("==========================","=========================");
            }

运行应用程序后,查看 logcat 并复制您的 regid 以便以后使用。 它看起来像这样:

=======================================
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================

第四步——部署一个 Droplet

部署一个新的 Ubuntu 14.04 服务器。 我们需要它作为我们的第三方应用服务器。

Google 的 GCM 连接服务器从第三方应用服务器(我们的 Droplet)获取消息,并将它们发送到 Android 设备上的应用程序。 虽然 Google 为 HTTP 和 CCS (XMPP) 提供了连接服务器,但我们在本教程中关注的是 HTTP。 HTTP 服务器仅在下游:云到设备。 这意味着您只能将消息从服务器发送到设备。

我们服务器的角色:

  • 与您的客户沟通
  • 向 GCM 服务器发出格式正确的请求
  • 使用指数退避处理请求并根据需要重新发送它们
  • 存储 API 密钥和客户端注册 ID。 API 密钥包含在发送消息的 POST 请求的标头中
  • 生成消息 ID 以唯一标识它发送的每条消息。 每个发件人 ID 的消息 ID 应该是唯一的

客户端将通过发送设备的注册ID与您的服务器进行通信,供您存储并在您发送通知时使用。 现在不用担心管理它; 这非常简单,GCM 通过在注册 ID 无效的情况下向您提供错误消息来为您提供帮助。

第五步 - 设置 Python GCM 简单服务器

使用 sudo 用户登录到您的服务器。

更新您的包裹清单:

sudo apt-get update

安装 Python 包:

sudo apt-get install python-pip python-dev build-essential

安装 python-gcm。 在此处 了解有关 python-gcm 的更多信息。

sudo pip install python-gcm

在服务器的某处创建一个新的 Python 文件。 比方说:

sudo nano ~/test_push.py

将以下信息添加到文件中。 替换 red 中标记的变量。 解释如下。

from gcm import *

gcm = GCM("AIzaSyDejSxmynqJzzBdyrCS-IqMhp0BxiGWL1M")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}

reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'

gcm.plaintext_request(registration_id=reg_id, data=data)

解释:

  • from gcm import *:这会导入适用于 Android 版 Google Cloud Messaging 的 Python 客户端
  • gcm:从 Google API 项目中添加您的 API KEY; 确保您的服务器的 IP 地址在允许的 IP 中
  • reg_id:从您的 Android 应用程序中添加您的 regid

第六步——发送推送通知

运行以下命令向您的应用发送测试通知:

sudo python ~/test_push.py

等待大约 10 秒钟。 您应该会在您的 Android 设备上收到通知。

故障排除。

如果通知在大约 10 秒后没有出现在您的设备上 not,请按照以下步骤操作:

  • 您的智能手机/平板电脑是否已连接到互联网?
  • 你有正确的项目密钥吗?
  • 您是否从应用程序中获得了正确的 regid?
  • 是否为 Google API 服务器密钥添加了服务器的 IP 地址?
  • 服务器是否连接到互联网?

如果您仍然没有收到通知,则可能是该应用程序。 检查 logcat 是否有一些错误。

从这往哪儿走

完成此简单测试后,您可能希望将通知发送给所有用户。 请记住,您必须以 1000 个为一组发送它们。 此外,如果 CGM 以“无效 ID”响应,您必须将其从数据库中删除。

您可以调整本教程中的示例以使用您自己的 Android 应用程序。