已知ch是ch字符型变量的赋值,下面正确的赋值语句是。 A.ch=’123’; B.ch=’\xff’; C

APNs全名是Apple Push Notification Service。用iPhone的应该都习惯了,每次安装完一个新应用启动后,几乎都会弹出个警告框,&XXX应用&想要给您发送推送通知。这个警告框的权限申请就是为了APNs推送,用户授权后,应用提供商就可以通过APNs给用户推送消息。APNs的工作机制简单来说可以分为两步,第一步是注册推送服务从APNs获取device token来告知应用提供商服务端,第二步是应用提供商服务端通过APNs给设备推送消息,device token是作为设备的唯一标示。上图就是device token生成的一个过程。我们以第一次安装启动360儿童卫士应用为例,首先应用会弹出个警告框,请求用户允许发送推送通知,用户允许后&&儿童卫士会向系统注册推送服务,系统接到注册请求后就会自动连接APNs服务器请求获取设备令牌(即device token)&&APNs服务器生成包含device id的device token并下发给设备&&儿童卫士接受到device token,保存在本地同时发送给儿童卫士服务器,到此第一步就完成了。上图就是推送消息的示图了,设备通过device token和APNs服务器保持连接状态。还以360儿童卫士为例,当孩子到家了,儿童卫士服务器就需要发到达提醒给家长。这时儿童卫士服务器就会通过device token作为目的设备标示来推送加密的到达提醒消息给APNs,APNs解密后再根据device token推送给指定设备。这样,一次推送就完成了。了解了APNs工作机制,很明显能够看到device token在其中起了至关重要的串联指向作用。如果device token错误或缺失,推送就无法送达目标设备了。所以测试也罢开发也好,都很有必要了解一下device token的一些特性:1.每个device token都是唯一的,只会对应一台设备。2.device token与设备系统相关(注意不是和设备绑定的!详解见后文),同一设备系统上不同应用获取的token是同一个。3.应用卸载重新安装,获取到的device token不会变化,而且不会再弹出推送权限申请的弹窗,会自动继承前一次安装的设置信息。这个特性容易引发一些安全问题,用户卸载重新安装一个应用后,还没有登录应用,就可能接到上次登录帐号的推送消息了。我使用iPhone QQ和Skype都碰到过这种情况。客户端没有办法处理这个问题,因为被卸载时客户端是没法做出反应来通知服务器的。苹果有一个feedback的机制可以解决这个问题,苹果为每个应用程序维护了一个不断更新的推送失败的设备列表。服务端可以去定期检查并更新推送设备列表,这样能解决大部分问题,也能减少不必要的报文开销。4.第三点客户端不能处理,但退出登录通知服务器就是客户端的工作了。用户退出登录客户端时,客户端应该告知服务器,停止对这个设备继续推送用户退出登录帐号的消息了。这点应该不算device token的特性了,是一个标准处理方法。相信很多人都有这样一个疑问,作为一个设备推送的唯一标示,device token是否会变化或者过期呢?苹果在这点上有些含糊其辞,只是在官方文档上建议开发者在每次启动应用时应该都向APNs获取device token并上传给服务器。从这句话来看,device token是会变化的,不然不用每次启动都去获取。因为苹果官方没有给出明确的device token变化的情况,所以以下列举的都是一些前人总结的经验,主要援引了stackoverflow上关于这个问题一个回答,回答者称是和苹果的一个工程师交流及自己实验得出的结果。1.升级系统device token有可能变化,确认的是升级到iOS5会变化,猜测是升级大的系统版本后device token会变化。2.抹掉所有内容和设置,reset设备后,device token会变化。3.恢复一个非本机的备份后,device token会变化。4.device token会过期,这个众说纷纭,有说是半年的,有说一年,有说两年的,不过会过期应该是确凿的。5.备份或者恢复本机的备份,device token不会变化。所以保险起见,按照苹果的每次启动应用时检查device token并发送到服务器是比较稳妥的做法。
来源:/360qtest//%E8%8B%B9%E6%9E%9Capns-device-token%E7%89%B9%E6%80%A7%E5%92%8C%E8%BF%87%E6%9C%9F%E6%9B%B4%E6%96%B0/
阅读(...) 评论()首先创建Certificate Signing Request(也就是CSR)的请求文件。这个文件最好保留起来,以后证书过期了只要再次用它生成对应证书。若丢失,一旦证书过期用这个文件生成的证书则需要全部更换(有点麻烦)。
请求的证书以及私钥都必须是同一个CSR文件生成。
1.生成开发者证书
2.下载开发者证书
3.创建App ID 若要使用推送功能必须为制定ID(不能包含*)
4.Push Nofications 选项默认关闭,编辑打开它,并创建SSL 证书&
5.下载SSL证书
6.创建Provisioning Profiles &&关键点:App ID 要使用创建的唯一ID(不包含*)
7.下载创建好的Provisioning Profiles
8.生成PEM格式的 证书 和 key
由于服务器一般识别PEM 格式的证书 所以我们还需要转换格式
这里用的是shell 终端&
cd ./Desktop 进入桌面 (我放在桌面上的)
$ cd ~/Desktop/
转换 .cer file 为 a .pem file:
$ openssl x509 -in aps_development.cer -inform der -out push_pro_cer.pem
.p12文件是用开发者证书里的密钥倒出得到的。
&openssl pkcs12 -nocerts -out
push_pro_key.pem&&-in&PushChatKey.p12
appletekiMacBook-Air:productionCer apple$&&openssl pkcs12 -nocerts -out PushChatKey.pem -in zazhipuProductionPushCer.p12&
Enter Import Password: &&&&&&&输入p12的密码
MAC verified OK &&&&&&&&&&&&&&设置新密码
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
注意这里输入密码是看不见的(呵呵)你只要输入就好。
新生成的PEM也需要密码&
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
为了测试证书是否工作,执行下面的命令:
telnet gateway.sandbox. 2195
下面我们要使用我们生成的SSL证书和私钥来设置一个安全的链接去链接苹果服务器:
openssl s_client -connect gateway.sandbox.:2195 -cert PushChatCert.pem -key PushChatKey.pem
关键的三行代码:
x509 -in&aps_production.cer&-inform
DER -out&aps_production_identity.pem-outform
pkcs12 -nocerts -out&PushChatKey.pem&-in&PushChat.p12
3.&cat&aps_production_identity.pem&PushChatKey.pem&&&ck.pem
记得发布时候要用发布的推送证书啊 还有发布的苹果推送地址
开发状态服务器地址
gateway.sandbox. 2195
产品状态服务器地址 gateway.&&&&&&&&&2195
Development和Production两个版本对应的apns
device token是不同的,前者是develop的mobileprovision下获取的。后者是production的mobileprovision获取的。
Development和Production两个版本可以共用一个App
ID(不推荐。共用时每次调试前都要删除设备上的app,重新打包生成。而且公用appid会经常抓狂,早上行,下午就不行了。所以不推荐),但是不能共用一个mobileprovision,所以要单独生成Distribution的证书供production版本使用。
注:Distribution的版本是无法在设备上debug调试的!
Development和Production两个版本的code
sign是不同的,前者是iPhone Developer,后者是iPhone Distribution。注意不能搞错。
无论是Development Push SSLCertificate还是Production Push SSL Certificate 都有过期时间的。Development Push SSL Certificate有效期大概四个月左右,而ProductionPush
SSL Certificate的有效期是一年。需要注意在过期之前生成新的证书,以免影响使用。
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-cert.p12
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
cat apns-dev-cert.pem apns-dev-key-noenc.pem & apns-dev.pem
在Mac上生成 Apple推送通知SSL许可证:
&&&&1.&&&&登录到&iPhone Developer Connection Portal&并点击 App IDs
&&&&2.&&&&创建一个不使用通配符的 App ID&。通配符 ID 不能用于推送通知服务。例如,我们的iPhone程序ID像这样:&<.serverdensity.iphone
&&&&3.&&&&点击App ID旁的“Configure”,然后按下按钮生产&推送通知许可证。根据“向导”指导的步骤生成一个签名并上传,最后下载生成的许可证。此步骤在&Apple文档中&也有谈到。
&&&&4.&&&&通过双击.cer文件将你的 aps_developer_identity.cer 引入Keychain中。
&&&&5.&&&&在Mac上启动 Keychain助手,然后在login keychain中选择 Certificates分类。你将看到一个可扩展选项“Apple Development Push Services”
&&&&6.&&&&扩展此选项然后右击“Apple Development Push Services” & Export “Apple Development Push Services ID123”。保存为 apns-dev-cert.p12 文件。
&&&&7.&&&&扩展“Apple Development Push Services” 对“Private Key”做同样操作,保存为 apns-dev-key.p12 文件。
&&&&8.&&&&需要通过终端命令将这些文件转换为PEM&#26684;式:
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
&&&&9.&&&&转换得到key的pem:
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-cert.p12
&&&&10.&&&&如果你想要移除密码,要么在导出/转换时不要设定或者执行:
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
&&&&11.&&&&最后,你需要将键和许可文件合成为apns-dev.pem文件,此文件在连接到APNS时需要使用:
cat apns-dev-cert.pem apns-dev-key-noenc.pem & apns-dev.pem
将此文件保存为一个易记的名字,你有可能以后会用到它。上述步骤同样适合于生成产品许可证。
检验证书是否正确的方法:
$&telnet gateway.sandbox. 2195
Trying 17.172.232.226…
Connected to gateway.sandbox..akadns.net.
Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。
然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:
$&openssl s_client -connect gateway.sandbox.:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息,但是你不得不向上翻输出LOG,来找到它。
当然上面要测试prodution版本是否正确的话,把gateway.sandbox.换成gateway.就好。
客户端很好做,申请证书,复制代码,就行了。
服务器端,如果是php的,那必须使用.pem的证书,如果是java的,那必须使用.p12的证书。(很可能还需要双击证书进行安装!)
服务器端发出的json包是有大小限制的,最大256字节,包括自定义字典集。
aps中的alert字符串里是可以添加&\n&做换行的。
json包中除了alert,badge,sound之外,还是是可以自定&#20540;的。
额外的自定义&#20540;:
  $payload['aps'] = array('alert' =& 'This is the alert text', 'badge'
=& 1, 'sound' =& 'default');
  $payload['server'] = array('serverId' =& $serverId, 'name' =& $name);
  $output = json_encode($payload);
  当用户按下“View”后,自定义server&#20540;将被传递到设备中的程序。JSON &#20540;如下:
  &aps& :
&&&&&&&&&&&{ &alert&
&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&action-loc-key&
: &显示& ,
&&&&&&&&&&&&&&&&&&&&&&&&&body&
: &This is the alert text&
&&&&&&&&&&&&&&&&&&&&&&&},
&&&&&&&&&&&&&&badge&
&&&&&&&&&&&&&&sound&
: &default& },
  &server& : { &serverId& : 1, &name& : &Server name&)
  256字节的限制适用于整个payload,包括自定义字典集。
  原生接口
  在Server Density中,一旦产生了一条提示,将建立一个payload并插入队列中。因此有必要时我们可以同时发送多个payload。
  Apple推荐使用这种方法,因为如果你在发送各payload时频繁连接和断开,APNS有可能会封锁你的IP。
  如Apple 描述:
  原生接口使用原生socket,具有二进制内容,采用数据流技术,不产生回馈。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:62657次
积分:1309
积分:1309
排名:千里之外
原创:55篇
转载:102篇
(1)(5)(2)(1)(2)(4)(16)(7)(5)(1)(2)(2)(1)(2)(6)(2)(8)(1)(3)(2)(1)(6)(3)(2)(5)(7)(5)(2)(8)(1)(2)(5)(4)(10)(4)(12)(5)(1)(1)(1)苹果APNs’ device token特性和过期更新 | Qtest技术空间&#8211;服务端测试,android,ios无线测试,智能硬件测试请问苹果apns推送失败会一直继续推送吗_手机问题_土巴兔问吧
请问苹果apns推送失败会一直继续推送吗
报价结果将发送到您的手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
报价短信已发送到您的手机
因材料品牌及工程量不同,具体报价以量房实测为准
稍候装修管家将回电您,免费提供装修咨询服务
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
3.&您家小区名称 :&&
请选择您家的装修时间
请问苹果apns推送失败会一直继续推送吗
提问者:邬书意|
浏览:107|
时间: 12:42:59
已有3条答案
回答数:3383|被采纳数:1
所有回答:&3383
iPhone在开启推送功能的时候,会连接APNS形成一条TLS(Transport &&Layer &&Security传输层安全)加密链接。
  每台正常的iPhone都有一个独有的设备证书(Unique &&Device &&Certificate),而APNS也有一个服务器证书。二者成立的时候,会验证彼此的证书有效性。TLS链接一旦成立,推送即可生效。如因为意外原因导致链接中断,iPhone会不断重新尝试成立TLS链接,直至成功。
  APNS判断推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个标识就是Device &&Token(设备标识)。而它则是每次成立TLS连接时,APNS通过每台正常的iPhone唯一的设备证书,并用标识密钥(Token &&Key)加密生成的。总的来说,要想推送功能生效,那就得保证iPhone上边的设备证书和标识密钥有效。
回答数:30835|被采纳数:14
所有回答:&30835
是的,但是自己可以设置限制。
苹果的 &&APNs &&推送不费流量。每一条推送通知的最大负载是 &&256 &&个字节。不过设备后台有常驻进程,保持和远端苹果推送服务器的实时 &&SSL &&连接(或者是纯 &&Wi-Fi &&环境同时待机的情况下定时重连),这需要耗费额外的流量,但是不多。
iOS &&为了真正地为用户体验负责,不允许应用在后台活动。 &&有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用)。 &&这就是 &&APNs &&的逻辑所在:iOS &&自己做个长驻后台保持连接。
希望可以帮到你~
回答数:9755|被采纳数:0
不忍回头看
所有回答:&9755
Apple对设备的控制非常严格,消息推送的流程必须要经过APNs
APNS是Apple &&Push &&Notification &&Service的缩写,是苹果的服务器。第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 &&第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。 &&第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
已有 3 个回答
已有 1 个回答
已有 1 个回答
已有 3 个回答
已有 3 个回答
位业主已在问吧找到答案
北欧简约、复古美式、大气欧式、清新地中海风,总有一款适合你!
一万套装修案例
下载土巴兔APP
中国装修网

我要回帖

更多关于 ch字符型变量的赋值 的文章

 

随机推荐