通过django的gcm或apns向移动设备发送推送通知。
mj-push-notifications的Python项目详细描述
django push notifications
==
一个最小的django应用程序,它实现了可以通过apns和gcm发送消息的设备模型。
该应用程序实现了两种模型:"gcm device"和"apnsdevice"。这些模型共享相同的属性:
-``name``(可选):设备的名称。
-``active``(默认值为true):一个布尔值,用于确定是否向设备发送通知。
-``user`(可选):要验证的外键。user,如果希望将设备链接到特定的用户。
-``设备id``(可选):从Android/iOS API获取的设备的UUID,如果您希望唯一标识它。
-``注册id``(必需):设备的GCM注册ID或APNS令牌。
可以测试单个和批量通知。选择一个或多个
gcm或apns设备,并在操作下拉列表中选择"发送测试消息"或"批量发送测试消息",相应地。
请注意,将非批量测试消息发送到多个设备将只在这些设备上迭代并发送多个
单个消息。
依赖项
----
django 1.8是必需的。在1.2.1版中提供了对旧版本的支持。
tastype支持应适用于tastype0.11.0及更高版本。
setup
----
您可以使用PIP:
…代码块::shell
$pip install django push notifications
edit your settings.py文件:
……代码块::python
已安装的应用程序=(
…
"推送通知"
推送通知设置={
"gcm_api_key":"<;您的api key>;",
"apns_certificate":"/path/to/your/certificate.pem",
}
……注意:
如果计划使用"debug=true"运行项目,请确保已将"development*证书"设置为"apns"证书。否则应用程序将无法连接到正确的主机。有关详细信息,请参见设置。
`` manage.py migrate``将安装和迁移所有模型。
…_设置:
设置列表
----
所有设置都包含在"推送通知"设置"dict"中。
若要使用GCM,必须包含"GCM API密钥"。
对于APN,您必须包含``APNS U certificate``.
-``APNS U certificate``:APNS证书文件的绝对路径。不支持带有密码短语的证书。
-``apns_ca_certificates``:apns的ca证书文件的绝对路径。可选-不需要时不设置。默认为无。
-``gcm-api-key``:gcm的api-key。
-``apns-host``:用于apns套接字的主机名。
-当``debug=true`时,默认为``gateway.sandbox.push.apple.com`。
-当``debug=false`,默认为"gateway.push.apple.com"。
-``apns-u port``:与apns-u主机一起使用的端口。默认为2195。
-``gcm_post_url``:将向其发布gcm通知的完整url。默认为https://android.googleapis.com/gcm/send。
-``gcm_max_recipients``:每个批量邮件可以包含的最大收件人数。如果"注册ID"列表大于该数字,将发送多条批量消息。默认值为1000(gcm支持的最大数量)。
发送消息
----
gcm和apns服务的语义略有不同。在使用这些模型时,该应用程序试图为这两种模型提供一个通用的界面。
。代码块::python
来自push_notifications.models import apnsdevice,gcm device
device=gcmdevice.objects.get(registration_id=gcm_regu id)
第一个参数将作为"消息"发送到intent extras bundle
发送一个额外的dict和一个none消息。
extras dict将映射到intent extras bundle中。
对于所有值都是键的dict,这将作为url参数发送,
但对于更复杂的嵌套集合,Extras dict将通过批量消息API发送。
设备。发送消息(无,extra={"foo":"bar"})
device=apnsdevice.objects.get(registration廑id=apns廑u token)
device.send廑u message("您有邮件")廑警报消息只能作为文本发送。
device.send廑message(none,badge=5)廑没有警报,但带有徽章。
device.send廑message(none,badge=1,extra={"foo":"bar"})带有徽章和添加自定义数据的无声消息。
…注意:
apns不支持发送超过2048字节的有效负载(从2014年的256字节增加到2048字节)。
如果构建的有效负载超过最大大小,则消息仅是有效负载的一部分,在发送任何内容之前都会引发"apnsdaotoverflow"异常。
代码块::python
from push_notifications.models import apnsdevice,gcmdevice
devices.send_u message("名称日快乐!")
批量发送消息利用了gcm和apns提供的批量机制。几乎总是最好发送
批量通知,而不是单个通知。
apns设备的web管理界面有一个"删减设备"选项。任何未接收通知的选定设备都将被设置为非活动[1]。
还有一个管理命令可删除所有未接收通知的设备:
。代码块::shell
$python manage.py prune_devices
_服务:https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/remotenotificationspg/chapters/communicationwithaps.html
----
-``notificationerror(exception)``:所有通知相关错误的基本异常。
-`` gcm.gcm error(notificationerror)``:gcm返回了一个错误。使用大容量通知时不会引发此问题。
-``apns.apnserror(notificationerror)``:发送apns通知时出错。
-``apns.apnsdaoverflow(apnserror)``:apns负载超过其最大大小,无法发送。
tastype支持
----
应用程序在push-notifications.api.tastype中包含与tastype兼容的资源。这些资源可以按原样使用,也可以作为基类
用于更多相关的api。
以下资源可用:
-``apnsdevicersource``
-``gcmdevicersource``
-``apnsdeviceauthenticatedresource`
-``gcmdeviceauthenticatedresource`
不要求身份验证,而经过身份验证的用户会将登录用户链接到他们注册的设备。
为添加"sameuserauthentication"而对经过身份验证的资源进行子类化,建议使用"foreignkey"。
分别位于`<;api_root>;/设备/apns``和`<;api_root>;/设备/gcm``。
django rest framework(drf)支持两种权限类型的APN和GCM设备:
-``apnsdeviewset``和``gcmdeviceviewset``
-在设置中指定的权限(默认情况下,``allowany`,这是不推荐的)
-可以注册设备,而不将其与用户关联``要获取和更新属于该用户的设备
-需要对用户进行身份验证,因此在创建"apnsdevice"时,所有设备都将与用户关联
,将验证"registration_id"为64字符或200字符的十六进制字符串。自2016年起,设备令牌将从32字节增加到100字节。
可以通过以下两种方式之一添加路由:
-路由器(包括所有视图)
。_路由器:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers;使用来自push-notifications.api.rest-framework import apnsdeviceauthorizedviewset的路由器gcmdeviceauthorizedviewset
来自rest_框架。路由器导入defaultrouter
router=defaultrouter()
router.register(r'device/apns',apnsdeviceauthorizedviewset)
router.register(r'device/gcm',gcmdeviceauthorizedviewset)
urlpatterns=patterns('',
url将显示在<;api_root>;/设备/apns
url(r'^',include(router.urls)),
·····························_如图所示:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers;将视图集显式绑定到URL
:
仅允许通过身份验证的用户创建设备
url(r'^device/apns/?$',apnsdeviceauthorizedviewset.as_view({'post':'create'}),name='create_apns_device'),
··············[1]在随后的"删减设备"呼叫中,未选择但未接收到通知的任何设备都不会被停用,除非在呼叫反馈服务后再次尝试向设备发送消息失败。
==
一个最小的django应用程序,它实现了可以通过apns和gcm发送消息的设备模型。
该应用程序实现了两种模型:"gcm device"和"apnsdevice"。这些模型共享相同的属性:
-``name``(可选):设备的名称。
-``active``(默认值为true):一个布尔值,用于确定是否向设备发送通知。
-``user`(可选):要验证的外键。user,如果希望将设备链接到特定的用户。
-``设备id``(可选):从Android/iOS API获取的设备的UUID,如果您希望唯一标识它。
-``注册id``(必需):设备的GCM注册ID或APNS令牌。
可以测试单个和批量通知。选择一个或多个
gcm或apns设备,并在操作下拉列表中选择"发送测试消息"或"批量发送测试消息",相应地。
请注意,将非批量测试消息发送到多个设备将只在这些设备上迭代并发送多个
单个消息。
依赖项
----
django 1.8是必需的。在1.2.1版中提供了对旧版本的支持。
tastype支持应适用于tastype0.11.0及更高版本。
setup
----
您可以使用PIP:
…代码块::shell
$pip install django push notifications
edit your settings.py文件:
……代码块::python
已安装的应用程序=(
…
"推送通知"
推送通知设置={
"gcm_api_key":"<;您的api key>;",
"apns_certificate":"/path/to/your/certificate.pem",
}
……注意:
如果计划使用"debug=true"运行项目,请确保已将"development*证书"设置为"apns"证书。否则应用程序将无法连接到正确的主机。有关详细信息,请参见设置。
`` manage.py migrate``将安装和迁移所有模型。
…_设置:
设置列表
----
所有设置都包含在"推送通知"设置"dict"中。
若要使用GCM,必须包含"GCM API密钥"。
对于APN,您必须包含``APNS U certificate``.
-``APNS U certificate``:APNS证书文件的绝对路径。不支持带有密码短语的证书。
-``apns_ca_certificates``:apns的ca证书文件的绝对路径。可选-不需要时不设置。默认为无。
-``gcm-api-key``:gcm的api-key。
-``apns-host``:用于apns套接字的主机名。
-当``debug=true`时,默认为``gateway.sandbox.push.apple.com`。
-当``debug=false`,默认为"gateway.push.apple.com"。
-``apns-u port``:与apns-u主机一起使用的端口。默认为2195。
-``gcm_post_url``:将向其发布gcm通知的完整url。默认为https://android.googleapis.com/gcm/send。
-``gcm_max_recipients``:每个批量邮件可以包含的最大收件人数。如果"注册ID"列表大于该数字,将发送多条批量消息。默认值为1000(gcm支持的最大数量)。
发送消息
----
gcm和apns服务的语义略有不同。在使用这些模型时,该应用程序试图为这两种模型提供一个通用的界面。
。代码块::python
来自push_notifications.models import apnsdevice,gcm device
device=gcmdevice.objects.get(registration_id=gcm_regu id)
第一个参数将作为"消息"发送到intent extras bundle
发送一个额外的dict和一个none消息。
extras dict将映射到intent extras bundle中。
对于所有值都是键的dict,这将作为url参数发送,
但对于更复杂的嵌套集合,Extras dict将通过批量消息API发送。
设备。发送消息(无,extra={"foo":"bar"})
device=apnsdevice.objects.get(registration廑id=apns廑u token)
device.send廑u message("您有邮件")廑警报消息只能作为文本发送。
device.send廑message(none,badge=5)廑没有警报,但带有徽章。
device.send廑message(none,badge=1,extra={"foo":"bar"})带有徽章和添加自定义数据的无声消息。
…注意:
apns不支持发送超过2048字节的有效负载(从2014年的256字节增加到2048字节)。
如果构建的有效负载超过最大大小,则消息仅是有效负载的一部分,在发送任何内容之前都会引发"apnsdaotoverflow"异常。
代码块::python
from push_notifications.models import apnsdevice,gcmdevice
批量发送消息利用了gcm和apns提供的批量机制。几乎总是最好发送
批量通知,而不是单个通知。
apns设备的web管理界面有一个"删减设备"选项。任何未接收通知的选定设备都将被设置为非活动[1]。
还有一个管理命令可删除所有未接收通知的设备:
。代码块::shell
$python manage.py prune_devices
_服务:https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/remotenotificationspg/chapters/communicationwithaps.html
----
-``notificationerror(exception)``:所有通知相关错误的基本异常。
-`` gcm.gcm error(notificationerror)``:gcm返回了一个错误。使用大容量通知时不会引发此问题。
-``apns.apnserror(notificationerror)``:发送apns通知时出错。
-``apns.apnsdaoverflow(apnserror)``:apns负载超过其最大大小,无法发送。
tastype支持
----
应用程序在push-notifications.api.tastype中包含与tastype兼容的资源。这些资源可以按原样使用,也可以作为基类
用于更多相关的api。
以下资源可用:
-``apnsdevicersource``
-``gcmdevicersource``
-``apnsdeviceauthenticatedresource`
-``gcmdeviceauthenticatedresource`
不要求身份验证,而经过身份验证的用户会将登录用户链接到他们注册的设备。
为添加"sameuserauthentication"而对经过身份验证的资源进行子类化,建议使用"foreignkey"。
分别位于`<;api_root>;/设备/apns``和`<;api_root>;/设备/gcm``。
django rest framework(drf)支持两种权限类型的APN和GCM设备:
-``apnsdeviewset``和``gcmdeviceviewset``
-在设置中指定的权限(默认情况下,``allowany`,这是不推荐的)
-可以注册设备,而不将其与用户关联``要获取和更新属于该用户的设备
-需要对用户进行身份验证,因此在创建"apnsdevice"时,所有设备都将与用户关联
,将验证"registration_id"为64字符或200字符的十六进制字符串。自2016年起,设备令牌将从32字节增加到100字节。
可以通过以下两种方式之一添加路由:
-路由器(包括所有视图)
。_路由器:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers;使用来自push-notifications.api.rest-framework import apnsdeviceauthorizedviewset的路由器gcmdeviceauthorizedviewset
来自rest_框架。路由器导入defaultrouter
router=defaultrouter()
router.register(r'device/apns',apnsdeviceauthorizedviewset)
router.register(r'device/gcm',gcmdeviceauthorizedviewset)
urlpatterns=patterns('',
url将显示在<;api_root>;/设备/apns
url(r'^',include(router.urls)),
·····························_如图所示:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers;将视图集显式绑定到URL
:
仅允许通过身份验证的用户创建设备
url(r'^device/apns/?$',apnsdeviceauthorizedviewset.as_view({'post':'create'}),name='create_apns_device'),
··············[1]在随后的"删减设备"呼叫中,未选择但未接收到通知的任何设备都不会被停用,除非在呼叫反馈服务后再次尝试向设备发送消息失败。