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

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

简介

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

我们将使用术语 服务器 来指代在 DigitalOcean 上创建的实例。我们将使用 GCM 来指代 Google 的服务器,即位于 Android 设备和您的服务器之间的服务器。

先决条件

在开始本教程之前,您需要准备以下内容:

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

关于推送通知

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

!GCM 连接服务器在第三方服务器和客户端应用之间发送数据。

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

步骤一 — 创建 Google API 项目

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

访问 Google Developers 控制台。

如果您以前没有在那里创建开发者帐户,您可能需要填写一些详细信息。

点击 创建项目

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

!新的 Google API 项目

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

!项目 ID 和编号

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

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

确保您的项目仍然在 Google Developers 控制台中被选中。

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

选择 API

在显示的 API 列表中,将 Google 云消息传递(Google Cloud Messaging for Android)的切换按钮设置为 。接受服务条款。

Google 云消息传递(Google Cloud Messaging for Android) 现在应该在此项目的已启用 API 列表中。

!已启用 Google 云消息传递(Google Cloud Messaging for Android)

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

选择 凭据

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

选择 服务器密钥

输入您服务器的 IP 地址。

!服务器密钥 IP

点击 创建

复制 API 密钥。您稍后需要在服务器上输入它。

!API 密钥

步骤三 — 链接 Android 应用

为了测试通知,我们需要将我们的 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 项目的 项目编号

每次设备注册到 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

将以下信息添加到文件中。替换标记为红色的变量。下面有解释。

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 云消息传递的 Python 客户端
  • gcm:添加你的 API 密钥 来自 Google API 项目;确保你的服务器 IP 地址在允许的 IP 中
  • reg_id:添加你的 regid 来自你的 Android 应用

第六步 — 发送推送通知

运行以下命令向你的应用程序发送一个测试通知:

sudo python ~/test_push.py

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

!推送通知示例

故障排除

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

  • 你的智能手机/平板电脑是否连接到互联网?
  • 你是否有正确的项目密钥?
  • 你是否有来自应用的正确的 regid?
  • 你的服务器的 IP 地址是否添加到 Google API 服务器密钥?
  • 服务器是否连接到互联网?

如果你仍然没有收到通知,那可能是应用的问题。检查 logcat 是否有一些错误。

下一步该怎么办

一旦你完成了这个简单的测试,你可能会想向所有用户发送通知。记住,你必须以 1000 个为一组发送它们。另外,如果 GCM 响应“无效 ID”,你必须从数据库中删除它。

你可以根据本教程中的示例来适应你自己的 Android 应用。


目录
相关文章
|
16天前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
127 64
|
2月前
|
移动开发 JavaScript 前端开发
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
服务器推送事件(SSE)是HTML5规范的一部分,允许服务器通过HTTP向客户端实时推送更新。相比WebSocket,SSE更轻量、简单,适合单向通信场景,如实时股票更新或聊天消息。它基于HTTP协议,使用`EventSource` API实现客户端监听,支持自动重连和事件追踪。虽然存在单向通信与连接数限制,但其高效性使其成为许多轻量级实时应用的理想选择。文中提供了Python和Go语言的服务器实现示例,以及HTML/JavaScript的客户端代码,帮助开发者快速集成SSE功能,提升用户体验。
|
3月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
117 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
16天前
|
存储 Android开发 数据安全/隐私保护
如何在Android设备上撤销Flutter应用程序的所有权限?
如何在Android设备上撤销Flutter应用程序的所有权限?
124 64
|
16天前
|
缓存 Android开发 开发者
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
170 62
|
16天前
|
开发工具 Android开发 开发者
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
139 61
|
1月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
144 69
|
8天前
|
传感器 物联网 Linux
Python:蓝牙心率广播设备监测(BLE 心率监测器)技术解析与实现
本文探讨了如何使用 Python 脚本与支持蓝牙低功耗(BLE)心率广播的设备交互以获取实时心率数据。重点分析了 BLE 协议、GATT 服务模型,以及具体方法。此外,还讨论了华为手表等设备的兼容性问题。
77 18
|
1月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
85 23
|
2月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。