如何使用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.mzph.cn/pingmian/7962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode83-Remove Duplicates from Sorted List

题目 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2] 示例 2: 输入:head [1,1,2,3,3] 输出&…

鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽

进程间为何要通讯 ? 鸿蒙内核默认支持 64个进程和128个任务,由进程池和任务池统一管理.内核设计尽量不去打扰它们,让各自过好各自的日子, 但大家毕竟在一口锅里吃饭, 不可能不与外界联系, 联系就得有渠道&#xff0c…

MySQL VARCHAR 最佳长度评估实践

你的 VARCHAR 长度合适么? 作者:官永强,爱可生 DBA 团队成员,擅长 MySQL 运维方面的技能。热爱学习新知识,亦是个爱打游戏的宅男。 作者:李富强,爱可生 DBA 团队成员,熟悉 MySQL&…

Go微服务精讲:Go-Zero全流程实战即时通讯(超清)

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。 Go微服务精讲:Go-Zero全流程实战即时通讯(超清) go-zero 中的 api,rpc,数据库等涉及的代码,…

C#标签设计打印软件开发

1、新建自定义C#控件项目Custom using System; using System.Collections.Generic; using System.Text;namespace CustomControls {public class CommonSettings{/// <summary>/// 把像素换算成毫米/// </summary>/// <param name"Pixel">多少像素…

Springboot 集成 Consul 实现服务注册中心-05

因为后续很多模块都要用到注册中心&#xff0c;所以此处先实现此模块。 Consul简介 Consul是一个开源的服务发现和配置管理工具&#xff0c;具有跨平台、运行高效等特点。它由HashiCorp公司开发&#xff0c;并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康…

解决Node.js mysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题

这是一个版本问题 我用koa2和mysql2链接就没有问题 不知道这个老项目运行为啥有这个问题 解决方案 打开mysql运行这个两个命令&#xff1a; ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123321; FLUSH PRIVILEGES; 须知(给小白看的&#xff01;) …

搜维尔科技:Senseglove Nova 数据手套触觉反馈测试

Senseglove Nova 数据手套触觉反馈测试 搜维尔科技&#xff1a;Senseglove Nova 数据手套触觉反馈测试

PCB板上的Mark点

PCB生产中Mark点设计 1.pcb必须在板长边对角线上有一对应整板定位的Mark点,板上集成电路引脚中心距小于0.65mm的芯片需在集成电路长边对角线上有一对对应芯片定位的Mark点;pcb双面都有贴片件时,则pcb的两面都按此条加Mark点。 2.pcb边需留5mm工艺边(机器夹持PCB最小间距要求…

优立科技:从数字孪生到元宇宙

2021年10月&#xff0c;Facebook致力于发展元宇宙&#xff0c;并更名为Meta。加上此前Roblox上市的消息&#xff0c;让「元宇宙」一词迅速在2021年爆火&#xff0c;刺激了VR、游戏等相关产业的发展&#xff0c;甚至有人宣称2021年为「元宇宙『元年』」。然而&#xff0c;「元年…

YOLOv8的训练、验证、预测及导出[目标检测实践篇]

这一部分内容主要介绍如何使用YOLOv8训练自己的数据集&#xff0c;并进行验证、预测及导出&#xff0c;采用代码和指令的两种方式&#xff0c;参考自官方文档&#xff1a;Detect - Ultralytics YOLOv8 Docs。实践篇不需要关注原理&#xff0c;只需要把流程跑通就行&#xff0c;…

信号产生的五种方式

文章目录 正文前的知识准备kill 命令查看信号man手册查看信号信号的处理方法 认识信号产生的5种方式1. 工具2. 键盘3. 系统调用kill 向任意进程发送任意信号raise 给调用方发送任意信号abort 给调用方发送SIGABRT信号 4. 软件条件5. 异常 正文前的知识准备 kill 命令查看信号 …

Boost的日志库Log使用详解

项目中使用到了Boost日志库&#xff0c;今日来探索一下&#xff1a; #include"boost/log/trivial.hpp" #include"boost/log/sinks/text_file_backend.hpp" #include"boost/log/utility/setup/file.hpp" #include"boost/log/utility/setup/…

构建 WebRTC 一对一信令服务器

构建 WebRTC 一对一信令服务器 构建 WebRTC 一对一信令服务器前言为什么选择 Nodejs&#xff1f;Nodejs 的基本原理浏览器使用 Nodejs安装 Nodejs 和 NPMsocket.io信令服务器搭建信令服务器客户端服务端启动服务器并测试 总结参考 构建 WebRTC 一对一信令服务器 前言 我们在学…

【Node.js从基础到高级运用】二十八、Node.js 内存管理浅析

Node.js 作为一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;其性能和效率在很大程度上取决于内存管理的优劣。 1. Node.js 内存结构 在深入了解内存管理之前&#xff0c;我们需要先了解 Node.js 的内存结构。Node.js 的内存可以大致分为以下几个部分&#xff1a;…

Jmeter页面汉化和字体显示过小调整

在频繁解压使用Jmeter的时候&#xff0c;经常会遇到需要将页面的英文调整为中文&#xff0c;页面文字和编辑区域内容文字显示较小的问题&#xff0c;记录一下方便以后查阅。 1.页面汉化 Jmeter在解压启动之后页面显示是英文&#xff0c;如果需要修改为中文&#xff0c;可以修改…

uniapp的app端软件更新弹框

1&#xff1a;使用html PLUS实现&#xff1a;地址HTML5 API Reference (html5plus.org)&#xff0c;效果图 2&#xff1a;在app.vue的onLaunch生命周期中&#xff0c;代码如下&#xff1a; onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…

【WEEK11】学习目标及总结【Spring Boot】【中文版】

学习目标&#xff1a; 学习SpringBoot 学习内容&#xff1a; 参考视频教程【狂神说Java】SpringBoot最新教程IDEA版通俗易懂员工管理系统 页面国际化登录功能展示员工列表增加员工修改员工信息删除及404处理 学习时间及产出&#xff1a; 第十一周MON~SAT 2024.5.6【WEEK11】…

YOLOv5改进 | 主干篇 | 2024.5全新的移动端网络MobileNetV4改进YOLOv5(含MobileNetV4全部版本改进)

一、本文介绍 本文给大家带来的改进机制是MobileNetV4&#xff0c;其发布时间是2024.5月。MobileNetV4是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶颈&#xff08;UIB&#xff09;和针对移动加速器优化…

AI烟雾监测识别摄像机:智能化安全防范的新利器

随着现代社会的不断发展&#xff0c;人们对于安全问题的关注日益增加&#xff0c;尤其是在日常生活和工作中&#xff0c;对火灾等意外事件的预防成为了一项重要任务。为了更好地应对火灾风险&#xff0c;近年来&#xff0c;AI烟雾监测识别摄像机应运而生&#xff0c;成为智能化…