如何创建一个服务器与GCM发送推送通知到Android设备使用Python

推送通知让你的Android应用程序通知,即使用户不使用你的应用程序的事件的用户。本教程的目标是一个简单的推送通知发送到您的应用程序。我们将使用Ubuntu的** 14.04 **和**的Python 2.7 **的服务器上,而谷歌**云端通讯**的推送通知服务。

介绍

推送通知可让您的Android应用程序通知用户某个事件,即使用户没有使用您的应用程序。 本教程的目标是向您的应用发送简单的推送通知。 我们将使用Ubuntu 14.04和服务器上的Python 2.7,谷歌云消息作为推送通知服务。

我们将使用术语服务器指纺与DigitalOcean实例。 我们将使用GCM指谷歌的服务器上,一个是Android设备和服务器之间。

先决条件

在开始教程之前,您需要具备以下条件:

关于推送通知

谷歌提供的GCM连接服务器的时间从第三方应用程序服务器的消息,如您Droplet,并发送这些消息到启用GCM-Android应用程序( 客户端应用程序 )的设备上运行。 目前,Google提供HTTP和XMPP的连接服务器。

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

换句话说,您需要自己的服务器与Google的服务器通信才能发送通知。 您的服务器向GCM(Google Cloud Messaging)连接服务器发送消息,然后连接服务器对邮件进行排队和存储,然后在设备处于在线状态时将其发送到Android设备。

第一步 - 创建Google API项目

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

访问谷歌开发者控制台

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

单击创建项目

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

新的Google API专案

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

项目ID和编号

记下项目数 您将在Android应用程式用户端使用。

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

请确保您的项目中仍然选择了谷歌开发者控制台

在左侧边栏中,选择API与授权

选择的API。

在的API显示的列表,打开谷歌云端通讯Android的切换到ON。 接受服务条款。

谷歌云端通讯Android现在应该在这个项目启用API的列表。

已启用Android版Google云端讯息功能

在左侧边栏中,选择API与授权

选择凭证

根据公开的API访问权限 ,单击创建新的密钥

选择服务器的关键

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

服务器密钥IP

单击创建

复制API密钥 您稍后需要在您的服务器上输入此信息。

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";

项目数从谷歌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 * :这种进口的Python客户端谷歌云端通讯的Android
  • gcm :添加从谷歌API项目中的API密钥 ; 请确保您的服务器的IP地址在允许的IP中
  • reg_id :从Android应用程序中添加您的REGID

第六步 - 发送推送通知

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

sudo python ~/test_push.py

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

推送通知示例

故障排除。

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

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

如果您仍未收到通知,则可能是应用程式。 检查logcat是否有错误。

从哪里去

完成此简单测试后,您可能需要向所有用户发送通知。 请记住,你必须给他们一组,1000此外,如果CGM响应“无效的ID,”你必须从数据库中删除它。

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