django ios通知使向ios设备发送推送通知变得容易

django-ios-notifications的Python项目详细描述


django ios通知
================= < BR>
django ios通知使向ios设备发送推送通知变得容易。 < BR>< BR>
安装
---- < BR>< BR>
最低要求 < BR>
*python 2.6或更高版本
*django 1.3或更高 < BR>
两个硬依赖项: < BR>
*`pyopenssl>;=0.10`
*`django fields>;=0.2.2个` < BR>< *** ** < BR>
1。可以使用pip安装:
*`pip install django ios notifications`获取最新版本
*`pip install git+https://github.com/stephenmuss/django ios notifications.git egg=django ios notifications`安装最新的边缘/开发版本
2。将"ios\u通知"添加到"设置文件"中的"已安装的应用"。
3。如果要使用api注册设备,则需要对url文件进行适当的更改。
*`url(r'^ios notifications/',include('ios_notifications.url'))`
4。创建所需的数据库表。
*`./manage.py同步数据库`
*如果使用south`./manage.py迁移ios_通知` < BR>< BR>
有关升级到0.2.0的说明
----
如果要从旧版本升级到0.2.0,并且在任何"APNService"中使用密码保护,则需要为每个版本租用密码并重新保存模型。
这是由于"django fields"的最新版本发生了更改。 < BR>< BR>
设置APN服务
---- < BR>
在添加某些设备和推送通知之前,需要设置APN服务。
下面是一个在开发环境中如何做到这一点的示例。 < BR>
启动开发服务器:`./manage.py runserver`并在Web浏览器中打开以下URL: < BR>
http://127.0.0.1:8000/admin/ios\u通知/apnservice/add/。
您将看到一个能够创建新APN服务的表单。 < BR>
我假设您已经创建了私钥和证书。
如果没有,我建议您按照其中一个在线指南完成此步骤。
可以在[此处]找到这样一个例子(http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12)。 < BR>
服务的名称可以是任意字符串。 < BR>
主机名必须是一个Apple APN服务主机的有效主机名。
目前这里是"gateway.sandbox.push.apple.com",用于沙盒测试,是"gateway.push.apple.com",用于生产。 < BR>
对于在证书和密钥中粘贴的证书和私钥字段,包括以下行: < BR>

----开始证书---
----结束证书---
----开始rsa私钥---
----结束rsa私钥---
< BR>
如果您的私钥需要密码短语,请确保将其输入到"passphrase"字段中。
否则此字段可以留空。 < BR>
在此之后,您就可以保存APN服务了。 < BR>< BR>
注册设备
---- < BR>
有几种不同的方法可以注册设备。您可以在管理界面中的
http://127.0.0.1:8000/admin/ios_notifications/device/add/或使用django ios notifications提供的api来执行此操作。 < BR>
如果要通过管理界面添加设备,则需要知道设备的标记(由64表示)
十六进制字符(请确保排除任何`<;`、`>;`和空白字符)。 < BR>
否则,django ios通知api提供了一个rest接口,您可以添加设备;
这通常通过从iOS应用程序发送请求来完成。 < BR>
要注册设备,您需要从设备发出POST请求,并在请求正文中传递适当的POST参数。 < BR>
要创建新设备,您需要调用http://127.0.0.1:8000/ios-n上的api通知/装置/ < BR>
完成此操作需要两个post参数:
*`令牌':设备的64字符十六进制令牌。
*`service`:要用于此设备的APNService实例的整数格式的ID。 < BR>
如果设备已经存在,则设备的"is_active"属性将更新为"true"。否则设备
将被创建。 < BR>
如果成功,api将以序列化json格式返回设备,如果设备是创建的,则状态代码为201。如果
设备已存在响应代码为200。 < BR>< BR>
获取设备详细信息
---- < BR>
要使用rest api获取现有设备的详细信息,应在http get请求中调用以下url: < BR>
`http://127.0.0.1:8000/ios通知/device/<;设备令牌>;/<;设备服务>;/`where:
*"设备"中64个字符的十六进制标记。
*`device_service`是设备相关APNService模型的整数格式的ID。 < BR>
例如:`http://127.0.0.1:8000/ios notifications/device/0fd12510cfe6b0a4a89dc7369d96df956f991e66131dab63398734e8000d0029/1/`。 < BR>
这将在响应体中返回一个带有json格式设备的http响应。 < BR>< BR>
更新设备
---- < BR>
django ios notifications rest接口还为您提供了更新的方法
通过api的设备。 < BR>
要更新设备,应调用与上面"获取设备详细信息"中相同的url。http请求方法
应该放置。您可以提供以下任何PUT参数来更新设备: < BR>
*`users`:与设备关联的整数格式的用户(django.contrib.auth.models.user)ID列表。
*`platform`:描述设备平台的字符串。允许的选项有"iphone"、"ipad"和"ipod"。
*`display`:描述设备显示的字符串(最多30个字符)。例如"480x320"。
*`OS U version`:描述设备OS版本的字符串(最多20个字符)。例如,"iPhoneOS5.1.1",这将是
从"[nsstring stringwithformat:@"%@",[[uidevice currentdevice]systemname],[[uidevice currentdevice]systemversion]得到的字符串。 < BR>
虽然技术上允许,但不建议通过api更新设备的任何其他属性。 < BR>
这将返回一个带有设备的http响应,该设备的响应正文中包含其json格式的更新属性。 < BR>< BR>
创建和发送通知
---- < BR>
与设备一样,有几种不同的方法可以创建通知。 < BR>
您可以通过转到http://127.0.0.1:8000/admin/ios_notifications/notification/add在管理界面中创建通知/ < BR>
如果创建通知并通过单击"保存并继续编辑"保存它,您将注意到
现在可以通过单击出现的"立即按下"按钮来按下此通知。
单击此按钮将通知发送到在相应APN服务器上注册的所有活动设备,
因此,在单击按钮之前,请确保您已经准备好发送它。 < BR>
另一个选项是使用django ios通知提供的内置管理命令。
您可以通过从命令行调用`./manage.py push_ios_notification`来完成此操作。
要创建和发送通知,需要为命令提供一些参数。 < BR>< BR>
只有一个必需参数: < BR>
*`--service`是要使用的APN服务的ID。例如,`--service=123`。 < BR>
可以传递的可选参数有: < BR>
*`--message`是包含通知主消息的字符串。例如,`--message='这是来自django ios notifications的推送通知!'`
*`——徽章`是一个整数值,表示收到通知后将出现在应用程序的跳板图标上的徽章值。例如,`--badge=2`。
*`--sound`是设备接收应用程序时要播放的声音。这可以是一个内置的声音,也可以是你的应用程序中包含的声音。例如,`--sound=default`。
*`--extra`用于指定要随通知一起发送的任何额外自定义负载值。这应该是一个有效的json字典。例如,`--extra='{"foo":"bar","baz":[1,2,3],"qux":1}`。
*`--persist`用于强制在数据库中持久化通知。
*`--no persist`不会将通知保存到数据库。 < BR>
请注意,要播放声音,必须提供"--sound"参数。同样,要在应用程序图标上显示徽章编号
应提供"--badge"参数。 < BR>
一个完整的例子: 'Br/''Bash
./manage.py推送iOS通知\
--message='这是来自django ios notifications的推送通知!'\
--服务=123\
--徽章=1\
--声音=默认值\
--extra='{"foo":"bar","baz":[1,2,3],"qux":1}\
--持续
< BR>< BR>
向设备子集发送通知。
---- < BR>
如果您只想向设备的一个子集发送通知,可以使用django ios notifications api轻松做到这一点。
这里的主要假设是,您可以通过某种方式知道要将通知推送到哪些设备。 < BR>
下面是一个简单的示例,说明如何基于设备的唯一推送令牌将通知推送到设备的子集。 < BR>
请注意,通知是分块发送到设备的。块大小可以在"apnservice.push_notification_to_devices"中指定。
默认块大小为100。对于理想的块大小有一些争论,但是每次使用大于几百的块是
不推荐。 < BR>
``巨蟒
设备令牌=('97BC2E598E1A11E2BACFB8F6B113C99597BD77428E1A11E2AE36B8F6B113C995',
"9c97e3d78e11e28470b8f6b113c9959c97e5a38e11e28fd6b8f6b113c995",
'ba32393d8e11e28035b8f6b113c995ba323b0a8e11e28254b8f6b113c995',
"c71667578e11e2a5cfb8f6b113c995c716692e8e11e29c74b8f6b113c995') < BR>
apns=apnservice.objects.get(hostname='gateway.push.apple.com',name='production')
devices=device.objects.filter(token\u in=device\u令牌,service=apns)
notification=notification.objects.create(消息='some message',服务=apns)
apns.push_notification_to_devices(notification,devices,chunk_size=200)覆盖默认的chunk size为200(而不是100)
< BR>
注意,您只需使用"apnservice.push_notification_to_devices"方法将通知推送到设备。 < BR>< BR>
连接到APNService。
---- < BR>
推送通知时,将打开到APNService的连接。值得注意的是,这可能会提高
尝试建立连接时出现问题时出现异常。 < BR>
有关详细信息,请参阅[pyopenssl文档](http://pythonhosted.org/pyopenssl/openssl ssl.html openssl ssl)。 < BR>< BR>
通知持久性
---- < BR>
默认情况下,通知对象保存到数据库中。如果你不要求这种行为,就有可能
禁用通知持久性。 < BR>
在"settings.py"文件中包括以下内容: < BR>
``巨蟒
ios_notifications_persist_notifications=false
< BR>< BR>
API认证
---- < BR>
目前rest api支持几种不同的身份验证模式。 < BR>
如果计划使用api,则需要在settings.py文件中指定"ios\u notifications\u authentication"。 < BR> 瓦尔"ios_notifications_authentication"的ue必须是以下字符串之一"authBasic"、"authBasicsStaff"或"authNone"。 < BR>
`authnone` < BR>
如果不关心保护api,则使用此设置。API将允许处理任何请求。
这是最容易开始的,但不是真正推荐的。 < BR>< BR>
`authBasic` < BR>
这将通过基本访问身份验证保护您的api。这意味着对api的任何请求都需要包含一个"authorization"头。
这将检查数据库中是否存在具有所提供凭据的用户。用户应该是"django.contrib.auth.models.user"的实例。
头的值将是单词"basic",后跟用户用户名和密码的base64编码字符串,后跟冒号":"。
例如,如果用户的用户名为"aladdin",密码为"open sesame",则需要对字符串"aladdin:open sesame"进行base64编码。
生成的头应该如下所示"authorization:basic qwxhzgrpbjpvcgvuihnlc2ftzq=`。强烈建议您只发送请求
通过ssl。否则,用户凭据将以明文形式未加密发送。 < BR>
有关详细信息,请参见[基本访问身份验证](http://en.wikipedia.org/wiki/basic_access_authentication) < BR>< BR>
`AuthBasicisStaff` < BR>
这与"authBasic"相同,只是只有当用户是人员用户时才允许请求。 < BR>< BR>
反馈服务和停用设备
---- < BR>
反馈服务用于确定不应再向哪些设备推送通知。
通常情况下,当用户从其设备中卸载了您的应用程序时会出现这种情况。 < BR>
[根据苹果公司](https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/remotenotificationspg/communicationwithaps/communicationwithaps.html//apple参考/doc/uid/tp40008194-ch101-sw3): < BR>
>;APNS监视提供商在检查反馈服务和避免向设备上不存在的应用程序发送推送通知方面的勤勉。 < BR>< BR>
因此,最好确保您不会将通知推送到不再安装应用程序的设备上。 < BR>
django ios notifications提供了一个"feedbackservice"类,让您发现不应再向哪些设备发送通知
发送通知。 < BR>
您可以通过http://127.0.0.1:8000/admin/ios\u notifications/feedbackservice/add/在管理中添加feedbackservice。
希望到现在为止,这个类的字段应该是不言而喻的。 < BR>
与"apnservice"一样,您需要为"feedbackservice"的任何实例提供主机名。
对于沙盒环境,您当前可以使用"feedback.sandbox.push.apple.com",而在生产环境中,您应该使用"feedback.push.apple.com"。 < BR>
您应该根据您的环境设置feedbackservice的apnservice关系。 < BR>
一旦创建了feedbackservice实例,就可以调用它来停用它通知您的任何设备。 < BR>
要执行此操作,可以运行"呼叫反馈"服务管理命令。这将调用反馈服务并停用任何设备
它由服务通知(通过将"is_active"设置为"false")。 < BR>
"call_feedback_service"命令接受一个必需的参数: < BR>
*——反馈服务:要调用的FeedbackService的ID。例如,`--feedback service=123`。 < BR>
一个完整的示例:`./manage.py call_feedback_service--feedback service=123` < BR>
注意:在沙盒环境中测试反馈服务时可能会遇到一些问题。
当某个应用程序是设备上该特定APN服务的最后一个启用推送的应用程序时,就会发生这种情况
一旦应用程序被删除,它就会断开持久连接接通APN服务。如果你想的话
测试反馈服务,确保设备上至少安装了一个其他应用程序
接收来自同一APN服务的通知。 < BR>
如果您想使用沙盒APN服务测试应用程序,我建议您创建另一个
xcode和ios配置门户中启用推送通知的虚拟应用程序。安装此应用程序
在您正在测试的任何设备以及当前应用程序上。现在你应该可以卸载你的应用了
请尝试从设备推送通知。只要虚拟应用程序仍然安装在您的设备上
下一次您尝试呼叫反馈服务时,都应该按照计划进行,您会注意到
当您在位于
http://127.0.0.1:8000/admin/ios\u通知/设备/ < BR>
请参见[使用反馈服务的问题](http://developer.apple.com/library/ios/technotes/tn2265/_index.html
了解更多详细信息) < BR>< BR>
贡献者
----
斯蒂芬·穆斯 < BR>
马克西姆巴吉尔 < BR> *BR/**** < BR>
此源代码是在新的bsd许可证下发布的。有关详细信息,请参阅许可证文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
macos在OS X Lion上安装Java EE 6   java Android Studio无法解析列表适配器中的方法   java使用xpath解析xml并获取嵌套的child   java中模式更新的设计模式编程方法   java ViewResolver Spring不工作   从SQLite for java/安卓中的数据库表中删除除前n之外的所有内容   java C++:对混合了向量的指针的引用。我有麻烦了   为BST实现equals和hashcode的java   java从游标适配器/列表视图中删除多个元素   使用MPAndroidChart,未显示java X轴标签   java从jPanel中的URL添加图像   java在应用程序关闭时本地存储数据,而不是放在后台   验证bean在Java11和SpringBoot2.5.3中不起作用