如何使用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 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/601408.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac idea gradle解决异常: SSL peer shut down incorrectly

系统:mac 软件:idea 解决异常: SSL peer shut down incorrectly 查看有没有安装 gradle -v安装 根据项目gradle提示安装版本 brew install gradle7idea的配置 在settings搜索gradle,配置Local installation,选择自己的安装目录…

c++编程(10)——string

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 文章目录 <string>string类的接口构造、析构、与赋值重载构造函数赋值重载运算符 元素访问operator[] 容量修改器对string对象的操作迭代器 std::string是定义在c标准的一个类&#xff0c;定义在标准库<strin…

【SAP ME 34】POD操作面板打开内部异常500内部异常

解决方案&#xff1a; 切换到configtool目录&#xff0c;打开configtool可执行文件

win10使用问题

ThinkPad进入bios一种方式是F1 win10有了一个BitLocker&#xff0c;所以在更改bios里面的一些设置&#xff0c;会要求输入恢复密钥&#xff0c;才能生效。 恢复密钥在Microsoft账户里可以找到。 1. 坑爹的Secure Boot设置 坑爹的Secure Boot设置 - 简书 2. 在安装昆仑通态…

小程序搜索排名优化 三步操作提升

搜索排名优化最直接的一个目的就是为了提升小程序的排名和流量&#xff0c;获取用户的信任度。当用户在搜索关键词的时候&#xff0c;能让用户看到小程序&#xff0c;增加被发现和点击的机会。 一、关键词优化&#xff1a; 1.选择合适的关键词&#xff1a;选择与小程序内容高…

昂科烧录器支持Infineon英飞凌的三相电机驱动器TLE9877QXA40

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Infineon英飞凌的三相电机驱动器TLE9877QXA40已经被昂科的通用烧录平台AP8000所支持。 TLE9877QXA40是一款单芯片三相电机驱动器&#xff0c;集成了行业标准的ARMCortex™M3 内…

Poisson_Image-Editing

1.算法介绍 快速泊松图像编辑&#xff08;Fast Poisson Image Editing&#xff09;是一种图像处理算法&#xff0c;用于将源图像的某个区域无缝地嵌入到目标图像中。它基于泊松方程的性质&#xff0c;通过求解离散化的泊松方程来实现图像的融合。该算法的核心思想是&#xff0c…

[Linux][网络][TCP][四][流量控制][拥塞控制]详细讲解

目录 1.流量控制2.拥塞控制0.为什么要有拥塞控制&#xff0c;不是有流量控制么&#xff1f;1.什么是拥塞窗口&#xff1f;和发送窗口有什么关系呢&#xff1f;2.怎么知道当前网络是否出现了拥塞呢&#xff1f;3.拥塞控制有哪些算法&#xff1f;4.慢启动5.拥塞避免6.拥塞发生7.快…

【XR806开发板试用】阻塞式串口发送与接收教程

本文基于wsl2搭建的ubuntu18.04 vscode编辑器 很奇怪啊&#xff0c;找了半天居然没人发串口的教程&#xff0c;于是只能自己试一试了&#xff0c;在此发一个阻塞式的串口发送与接收的教程。并且&#xff0c;感谢.ACE彭洪权大佬在我配置环境遇到几十个报错的时候帮我远程搭建环…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

燃料电池发电系统详解

目录 前言 组成结构 系统参数 常见问题 参考资料 前言 见《氢燃料电池技术综述》 见《燃料电池工作原理详解》 组成结构 燃料电池发电系统&#xff0c;由多个子系统和子模块组成&#xff0c;示例如下&#xff1a; 燃料处理系统&#xff08;fuel processing system&#xf…

使用 Kubeadm 搭建个公网 k8s 集群(单控制平面集群)

前言 YY&#xff1a;国庆的时候趁着阿里云和腾讯云的轻量级服务器做促销一不小心剁了个手&#x1f60e;&#x1f622;&#xff0c;2 Cores&#xff0c;4G RAM 还是阔以的&#xff0c;既然买了&#xff0c;那不能不用呀&#x1f6a9;&#xff0c;之前一直想着搭建个 k8s 集群玩…

详解MySQL常用的数据类型

前言 MySQL是一个流行的关系型数据库管理系统&#xff0c;它支持多种数据类型&#xff0c;以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型&#xff0c;包括数值类型、字符…

[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析(3)

“ 金融行业在自身数据治理和资产化建设方面一直走在前列。” 一直以来&#xff0c;金融行业由于其自身需要&#xff0c;都是国内开展信息化建设最早&#xff0c;信息化程度最高的行业。 在当今数据要素资产化的浪潮下&#xff0c;除了行业自身自身数据治理和资产化建设方面&am…

清华大模型ChatGLM3在本地Tesla P40上也运行起来了

正文共&#xff1a;999 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们之前部署了ChatGLM3&#xff08;清华大模型ChatGLM3部署初体验&#xff09;&#xff0c;但是运行体验比较差&#xff0c;主要就是因为Tesla M4的显存只有4 GB&#xff0c;无法支撑项目运行。为此…

PyCharm怎么安装Comate与使用示范

目录 简单介绍Comate 安装步骤详解 Comate使用示范详解 使用总结 简单介绍Comate Baidu Comate智能编码助手是一款基于文心大模型打造的编码辅助工具&#xff0c;具备多重优势&#xff0c;包括代码智能、应用场景丰富、创造价值高、广泛应用等。它能帮助开发者提升编码效率…

数仓开发中期:理论巩固

一、数仓以及商业智能&#xff08;Data Warehousing and Business Intelligence, DW/BI&#xff09;系统 1.1数据操作和数据获取的区别 对所有组织来说&#xff0c;信息都是其最重要的财富之一。信息几乎总是用作两个目的:操作型记录的保存和分析型决策的制定。简单来说&…

关于vs2019 c++ STL 中容器的迭代器的 -> 运算符的使用,以 list 双向链表为例

&#xff08;1&#xff09;如下的结构体 A &#xff0c;若有指针 p new A() &#xff1b;则可以使用 p->m &#xff0c; p->n 解引用运算符。 struct A { int m ; int n; } 对于 STL 中提供的迭代器&#xff0c;提供了类似于指针的功能。对迭代器也可以使用 -> 运算…

ElasticSearch知识点汇总

1、ES中的​​​​​​​倒排索引是什么。 倒排索引&#xff0c;是通过分词策略&#xff0c;形成了词和文章的映射关系表&#xff0c;这种词典映射表即为倒排索引 2、ES是如何实现master选举的。 选举过程主要包括以下几个步骤&#xff1a; 心跳检测&#xff1a; 每个节点…

docker安装elasticsearch:7.17.21

docker安装elasticsearch:7.17.21 下载对应版本的docker镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.21启动容器 docker run --name elasticsearch-test -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -t docker.elastic.…
最新文章