介绍
推送通知可让您的Android应用程序通知用户某个事件,即使用户没有使用您的应用程序。 本教程的目标是向您的应用发送简单的推送通知。 我们将使用Ubuntu 14.04和服务器上的Python 2.7,和谷歌云消息作为推送通知服务。
我们将使用术语服务器指纺与DigitalOcean实例。 我们将使用GCM指谷歌的服务器上,一个是Android设备和服务器之间。
先决条件
在开始教程之前,您需要具备以下条件:
- Android应用程序 ; 看到developer.android.com
- Ubuntu的14.04Droplet
- 您的Droplet的IP地址
关于推送通知
谷歌提供的GCM连接服务器的时间从第三方应用程序服务器的消息,如您Droplet,并发送这些消息到启用GCM-Android应用程序( 客户端应用程序 )的设备上运行。 目前,Google提供HTTP和XMPP的连接服务器。
换句话说,您需要自己的服务器与Google的服务器通信才能发送通知。 您的服务器向GCM(Google Cloud Messaging)连接服务器发送消息,然后连接服务器对邮件进行排队和存储,然后在设备处于在线状态时将其发送到Android设备。
第一步 - 创建Google API项目
我们需要创建一个Google API项目,为我们的应用启用GCM。
访问谷歌开发者控制台 。
如果您从未在此处创建过开发者帐户,则可能需要填写一些详细信息。
单击创建项目 。
输入项目名称,然后单击创建 。
等待几秒钟,以便创建新项目。 然后,查看项目页面左上角的项目ID和项目编号 。
记下项目数 。 您将在Android应用程式用户端使用。
第二步 - 为您的项目启用GCM
请确保您的项目中仍然选择了谷歌开发者控制台 。
在左侧边栏中,选择API与授权 。
选择的API。
在的API显示的列表,打开谷歌云端通讯Android的切换到ON。 接受服务条款。
谷歌云端通讯Android现在应该在这个项目启用API的列表。
在左侧边栏中,选择API与授权 。
选择凭证 。
根据公开的API访问权限 ,单击创建新的密钥 。
选择服务器的关键 。
输入您的服务器的IP地址。
单击创建 。
复制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";
与项目数从谷歌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应用程序。