苹果顶部苹果状态栏美化的推送通知声音从哪里设置

您好!您的登录名为, 您已经成功登陆金桥论坛!
当前位置:--- 正文
苹果4S陌陌怎么更换来消息声音
阅读(4692)
苹果4S陌陌怎么更换来消息声音QQ : 在手机设置里面有。。。狮王星期天 : 应该在设置里面有想你 : 找个人教你1号爱国者 : 苹果4S陌陌怎么更换来消息声音在默默设置里Royal丶Azrael : 摸排摸力魔am时间遏制有关知识:4s手机陌陌关闭了消息推送后台为什么还能接收消息呢? : 您好,是这样的就算关闭了有好友消息是会通知的。但是关闭了群消息就不会推送通知。没有关闭连群消息也会通知的,祝您愉快。望采纳。谢谢我iphone5陌陌消息发来没提示,要打开陌陌才看得到,通知那些... : 陌陌和QQ和微信那些都一样的,需要在软件里面设置通知说需不需要显示消息内容,你可以看看。手机本身只是设置需不需要通知而已。为什么iphone4s陌陌后台了,可是收不到信息?该打开的都打开了... : 你的是港版还是美版,处理方法有点不一样,最好进入苹果手机论坛,上面有你想要的,望采纳!!!为甚么在陌陌,可以送达消息,但是什么都收不到,对方也没有已读 : 消息发了不少,只显示送达,可能被拉黑了,哎,悲剧!iphone4 陌陌最新版来消息怎么不提示 : 一 通知你虽然开了,但是通知下面的"陌陌"那一项的通知你关了。二 你确定你的系统是5.0以上的么?如果不是是没有系统通知的,都是右上角的那个小数字提示。非常有可能是第...苹果4S如何设置短信铃声 : 手机越狱后更换铃声的方法很多,网上一搜一大把。但是你没越狱的话我试了一下,最简单的办法就是app store有个应用叫铃声大全,是免费的。你下载完之后在手机上按它的提示...我在陌陌上认识一个女孩,聊得挺投机的,可是不小心把她删了,我... : 如果是在你自己的电脑上删掉的,你去消息管理器那里,打开,然后看左边,在消息分组的QQ联系人那里,最后一个是黑名单/已删除联系人,你看看,应该会找到的,反正我删除的人都在...苹果4s怎么设置短信铃声 : 那个就要求越狱了,没越狱的时候只能添加来电铃声陌陌 消息 发送失败什么意思 是把我拉黑了吗? : 网络有问题哈。。不是拉黑陌陌给人发信息,全部显示送达,怎么都没显示已读啊,这个什么情... : 可能是别人没有看,或者是忽略阅读了(谢谢,觉得可以的话请采纳哦,不行可以追问)
发表你的看法
等级:总经理
级别:高级贵宾
文章:9481
积分:19139
分享给朋友?用微信扫描左侧二维码可以将文章分享到朋友圈(转)苹果推送通知办事教程&Apple&Push&Notification&Services&Tutorial
苹果推送通知办事教程 Apple Push
Notification Services Tutorial
2012年3月31日
本文译自。
原文由iOS教程团队 Matthijs Hollemans
撰写,经原网站经管员授权本博翻译。
在iOS体系,推敲到手机电池电量,应用不容许在后台进行过多的操纵,当用户未开启应用时,要怎么样才干通知用户呢?
比如用户收到一个新的微博、喜好的球队取得一场成功或者是晚餐筹办好了,若是应用都不在运行傍边,当然也就无法去获得这些事务。
荣幸的是苹果供给一个解决规划,经由过程你本身的办事组件来调换应用连气儿地搜检事务或在后台进行类似的操纵,当事务及时产生时,办事组件能发送通知给应用,经由过程下列三种体式格式提示用户:
1、显示简短的文本作息;
2、播放提示音;
3、在应用图标上显示数字提示(就是红色靠山的那个)。
你可以把这三种体式格式随便地组合应用,比如播放声音并显示一个提示数字罢了。在本教程中,你可以用APNS(Apple Push Notification
Services)来开辟一个简单的应用。
我们先来进修一下在应用开辟中如何设置接管推送通知,如何接管一条测试通知。本教程针对的是有一些经验的iOS开辟者,初学者请在先选择一些初级教程:
目次:/tutorials
希罕是这两篇:
How To Write A Simple PHP/MySQL Web
Service for an iOS App
How To Write an iOS App That Uses A
Web Service
筹办好了吗,让我们开端吧:
一、根蒂根基框架
要让苹果推送通知办事正常工作,涉及很多方面,下图是一个根蒂根基框架:
应用启用推送通知功能,须要用户确认;
1、应用收到设备辨认ID(device token),相当于接管推送通知的地址;
2、应用将设备辨认ID发送到你开辟的办事器;
3、当有推送通知的须要时,你就可以经由过程你开辟的办事组件发送信息到苹果的办事器上;
4、苹果推送通知办事将信息推送到用户的设备上。
用户设备接管到推送信息时,显示提示信息或播放提示音或更新主屏图标的提示数字,用户可以从提示信息窗口打开应用法度,应用可以按照提示信息的内容作进一步的处理惩罚。
二、iOS4支撑本地通知和后台多任务,是否我们就不须要推送通知了呢?
答案是否定的,本地通知仅限于周期性按时事务处理惩罚,后台多任务也仅限于一些必须对峙运行的应用,比如IP语音、后台音乐播放、导航等,若是你须要在你的应用封闭时提示你的用户,你就必须应用推送通知办事
接下来,我们来商量一些实现苹果推送通知办事的技巧细节,内容斗劲多,泡好一杯咖啡,安适卖力地浏览本教程吧。
三、苹果推送通知办事的目标
在你的应用中增长苹果推送通知办事有以下几项筹办工作:
1、一台iPhone或iPad,苹果推送通知办事不克不及在模仿器上工作,你必须在真机上测试;
2、你得有付费开通的iOS 开辟者会员资格,你必须在苹果开辟者门户(iOS Provisioning Portal)新增一个新的应用ID、对应的设备文件(provisioning profile)、专属于的SLL认证证书;在全部过程中,你将创建本身的设备文件和证书,获取认证证书是很稳重的过程,必须遵守规定履行,后文中有具体的操纵步调;
3、一台联入互联网的办事器,苹果推送通知办事是在互联网上工作,开辟时你可以在你的工作站上测试,然则实际应用时,你至少须要一台虚拟小我办事器,然则要包管可以安装证书,并开放响应的端口与苹果的办事器建树安然套接字(TLS)收集连接,一般IDC虚拟空间供给商不会供给此类额外办事,请先与你的供给商确认这些细节;
当然,还有专门供给苹果推送通知办事的收集办事商,你可以自行谷歌之,本文不评论辩论。
四、推送通知格局
你的办事器组件将按照事务或须要创建推送通知,你得先懂得推送通知的具体格局;
一个推送通知包含设备辨认ID,通知主体和一些标识字节,通知主体是我们要发送的内容。
起首我们得按JSON格局组织好通知主体,下面是一个最简单的示例:
{"aps":{"alert":"测试信息","sound":"default"}}
用大括号{}将键值对(字典对象)封装起来,有点像NSDictionary。
通知主体至少得包含一个项目:”aps”,这个项的内容还是一个字典对象,在上方这个示例中,”aps”包含两个字段:alert和sound,让设备收到这个推送通知时,设备会弹出一个提示窗口,内容是测试信息,同时播放标准的提示声音。
在aps这个字段下我们还可以自定义一些内容:
{"aps":{"alert":{"action-loc-key":"Open","body":"Hello, world!"},"badge":2}}
在这个示例中,字段”alert”也变成一个字典对象,字段”action-loc-key”从头定义弹出提示窗口中确认按钮上的文字,”badge”字段是须要在主屏图标上显示的提示数字,这个示例没有播放声音。
还有很多通知主体内容的设置体式格式,你可以改变播放的声音,可以按照本地说话化的调置供给本地化的提示文字,甚至于加上你自定义的字段内容。更多材料请移至官方《本地和推送通知开辟指引(英)》。
出于效力的推敲,推送通知的字节长度不克不及跨越256个字节,类似于短信或推特(微博),所以在组织JSON通知主体内容时,一般我们都不保存换行和空格:
{"aps":{"alert":"Hello,
world!","sound":"default"}}
如许已经很清楚了,不是吗,跨越256个字节的推送通知,苹果的办事器可是会主动过滤掉的。
五、正式开端
推送通知不包管发送接管的靠得住性!!??
是的,就算APNS接管发送的恳求,推送通知的接管也是没有包管的。
卖力推敲你的应用是否实用推送通知,如今没有办法确认推送通知发送的状况和接管与否,发送时候也无法获得包管,可能几秒也可以半小时。
并且,若是用户设备经由过程受限的局域网在线或处于关机状况,也是收不到推送通知的。
APNS会测验测验在设备从头上线时发送最后一条推送通知,然则这种测验测验不会连气儿太长时候,之后推送通知就永远失效了。
别指望在APNS里查找汗青记录
发送推送通知的本钱可能比你估计的要高!增长这个功能很简单,然则要保护一个斗劲大的用户群或一些特别应用处应时,你可能须要承担较高的本钱。
只要监控你网站上的更新,并发送通知到你的用户是斗劲简单的,然则若是你供给的功能包含自定义监控其他网站的更新时,你的办事器要可以或许运行得了可能远跨越你估计的监控任务。
所以你还必须从保护本钱上推敲你的应用是否须要这功能。
好了,理论性的器材就这么多了,如今是时辰来实践一下了。在编写代码之前,你还须要在苹果的开辟者门户网站上处理惩罚一些烦人的步调。
六、设备文件和证书
我勒个去!
APNS须要认证证书!
要在你的应用中启用推送功能,一个对应的设备文件是必不成少的,你须要用它来跟APNS确认APP,不是吗?
设备文件和证书只能经由过程对应有效的苹果开辟者规划成员来取得,如许才干包管只有你的办事组件才干发推送通知到你的应用。
若是你有过开辟经验,你知道应用设备文件分为开辟和公布两种类型,推送设备文件也有两种:
开辟(Development).对应着你开辟测试时用的应用设备文件
公布(Production).对应着你正式公布时用的应用设备文件
在本教程中,我们只要存眷开辟设备文件即可。
筹******书申请文件(Certificate Signing
Request&)
还记得初度经由过程苹果开辟者门户获取开辟证书的过程吗?下面的过程你应当会感觉斗劲熟悉。然则还是要卖力地浏览此中的细节,大多半故障题目都跟证书有关。
数字证书基于公私钥加密体式格式,这里我们并不须要懂得加密的过程,你只要懂得数字证书老是和小我私钥文件归并应用就行了。证书是公钥的项目组,用于建树基于SSL的加密收集连接,并不须要高强度的保密,而私钥不合,这是“私的”,你须要好好地保存。
要申请数字认证,你须要先筹办一个证书申请文件(CSR),筹办好后会在“钥匙串”法度(MAC
OS)中生成一个新的私钥项目,把证书申请文件发给证书发放方(这里是苹果开辟者门户),你将可以获取一个对应的SSL证书。
在你的MAC电脑上的【应用法度/实用对象】下打开“钥匙串接见”法度(Applications/Utilities/Keychain
Access),在【Keychain
Access/Certificate Assistant】菜单中选择【Request a Certificate a Certificate
Authority….】
若是你没有找到这个菜单项或是提示“Request a
Certificate a Certificate Authority with
key”,你还须要额外在开辟者门户里下载并安装&WWDR Intermediate
Certificate&。
确认没有选中窗口列表中的任何私钥,你应当可以看到以下窗口:
输入你的邮件地址,固然有人建议说最好是跟开辟资格的用户一致,然则看起来不一样也没有关系。
输入PushChat(示例应用名称)在common name
项,实际上随便你填什么,只要你到时可以或许经由过程定名找到你的私钥就行。
选择【保存在本地磁盘(Saved to
disk)】,将CSR保存为“PushChat.certSigningRequest”。
如今你在“钥匙串接见”法度中Keys分类下应当可以找到一个新的私钥项目,右击并选择Export。
将私钥保存为文件,保存时会提示你输进口令,定名为“PushChatKey.p12”。
为了便利在本教程里引用,我应用“pushchat”
作为口令,实际应用时应当应用高强度的暗码口令。可不克不及忘怀口令,不然后面你可能无法接见私钥文件。
筹办应用ID(App ID)和SSL证书
登入苹果开辟者门户。
起首,我们先填写一个新的应用ID,每个推送通知办事都对应着独一的应用,在这里,你不克不及应用通配符。
在左项菜单中选择APP
IDs,点击按钮【New App
填写如下:
Description: PushChat
Bundle Seed ID: Generate New
(this is the default
Identifier: com.hollance.PushChat
这里你得填上本身的标识:com.yoursite.PushChat,因为你在XCODE得用同样的标识开辟应用。
稍等一会,你就可以生成对应这个APP的SSL证书,你的办事组件经由过程这个证书也只能发送通知到这个APP。
填写完毕,你应当可以看到下列信息:
在【Apple Push Notification
service】列,有两行有橙色小圆点肇端的信息:【Configurable for Development】 和【Configurable for
Production】。这就意味着这个应用ID已经筹办好了,接下来设置相干的选项。点击【Configure】链接。
点选【Enable for Apple Push
Notification service】框,点击对应【Development Push SSL Certificate】的设置按钮&【Configure】,弹出 苹果推送办事SSL证书助理(Apple Push Notification service SSL Certificate
Assistant)窗口 :
起首提示你筹办好证书签名申请文件,我们上方已经筹办好了,点击持续,鄙人一步中进行上传CSR文件的操纵,选中之前生成的CSR文件然后点击生成(Generate)。
生成证书须要几秒钟,接着点持续按钮(Continue)。
下载生成的证书并保存为“aps_developer_identity.cer”。点击完成按钮(Done)封闭助理窗口返回APP ID界面。
你可以看到,我们已经激活开辟用的证书认证,若是须要你可以在这里从头下载证书,开辟证书的有效期为3个月。
等你要正式公布你的应用的时辰,你必须在开辟认证那一项面前目今把这个过程从头来一遍。
备注:开辟认证的证书有效期为一年,你必须在到期前从头生成一次来包管你的体系正常运行。
在本例中你不须要安装这个证书,若是你双击文件进行了安装,你可以在钥匙串接见法度中查找到,这个证书已经和私钥绑定在一路了。
七、建造PEM文件
如今我们有三个文件:
认证签名申请文件(CSR)
私钥文件(PushChatKey.p12)
SSL证书文件(aps_developer_identity.cer)
妥当地保存好这三个文件,希罕是CSR文件,在你的证书失效之后,你可能会再次用到它来申请证书。本来的私钥还可以用,只有SSL证书文件是新的。
我们须要转换证书和私钥文件为一种常用格局,示例中我们应用PHP开辟办事组件,我们须要把证书和私钥文件归并为PEM格局文件。
我们不消关怀是哪一种具体的PEM编码格局(实际上我也不是很清楚),关键是PHP可以用来与办事器建树有效的收集连接,其他的编程说话可能会用到其它格局的文件。
在这里,我们用MAC电脑的号令行对象OpenSSL来操纵,打开一个“终端”(Terminal)法度:
经由过程cd号令转到存放三个文件的文件夹,我这里的操纵是:
¥ cd
/Users/matthijs/Desktop
转换证书&.cer 文件到 .pem 文件格局:
¥ openssl x509 -in
aps_developer_identity.cer -inform
der&-outPushChatCert.pem
转换私钥 .p12 文件 到
.pem 文件格局:
¥ openssl pkcs12 -nocerts
-outPushChatKey.pem -inPushChatKey.p12
EnterImportPassword:
MAC verified OK
Enter PEM pass phrase:Verifying-Enter PEM pass phrase:
在这里,你起首要输入私钥文件的口令以便接见.p12文件,接着请求输入一次新的口令来加密新的PEM文件,这里我们都用“pushchat” ,你也可以应用更错杂的口令来保护你的私钥。
备注:若是你不输入一个6位以上的加密口令,openssl对象将给失足误信息并作废操纵。
最后,我们把这两个文件归并成一个 .pem
¥ cat PushChatCert.pem
PushChatKey.pem & ck.pem
想测试一下证书是否正常,来试一下:
¥ telnet
gateway.sandbox. 2195Trying17.172.232.226...Connected
to gateway.sandbox..akadns.net.Escape character
这里是生成一个通俗的收集连接,若是有上方的信息,申明你的电脑可以联上APNS办事器,按Ctrl+C封闭连接。
若是有题目,你须要搜检一下收集和防火墙的端口2195的设置。
此次我们试一试用私钥和证书进行SSL加密连接:
¥ openssl s_client -connect
gateway.sandbox.:2195-cert PushChatCert.pem -key
PushChatKey.pem
Enterpass phrase forPushChatKey.pem:
你应当可以看到接下来的全部输出,我们已经站在正确的起跑线上了。
若是连接成功,你可以输入几个字符,当你按下回车,连接就断开了,连接失败的话也会有提示信息。
希罕提示你有两个不消的APNS办事器,一个用于测试的沙盒办事器,一个用于正式应用的办事器,我们建造的证书是用于测试的,所以上方的示例中我们应用的是沙盒办事器的地址。
八、筹办设备文件
开辟者门户上的操纵还没有完,点击左项菜单上的【Provisioning】,点击【New Profile】新建一个设备文件。
填入如下内容:
设备名称Profile Name: PushChat
Development
证书(Certificates):选中你的开辟者证书&
应用ID(App ID): PushChat&
设备(Devices): 选中你的开辟设备
这里的操纵跟你之前的没有什么不消,只是具备推送功能的应用须要一个新设备文件来跟设置好的APP对应起来。
点击发送按钮(Submit),新的设备文件就会从头生成,稍等片霎,再刷新页面即可下载新的设备文件(PushChat_Development.mobileprovision)。
将设备文件下载并加载到XCode(双击或拖到XCode图标上)。
筹办正式公布前,你也要如许操纵来筹办用公布用的设备文件。
九、简单的示例应用
你还在吗?经验了这么多终于可以来点高兴点的工作了,不过上方的这些过程是必不成少的,至少这些也不须要天天搞的,不然是会死人的,不是吗?
我们已经实现与沙盒办事器的加密收集连接,如今就让我们来实现推送通知的发送吧。
打开你的XCode,选择【File】【New Project】,选择【View-based Application】点击持续:
填入以下内容:
Product Name: PushChat
Company Identifier:
com.hollance
Device Family: iPhone
按照你的实际景象填入应用名称和开辟者标识,这里我们就填入“com.hollance.PushChat”。你应当填入跟你在开辟者门户里填入的一致信息(com.yourname.PushChat)。
完成新建项目标操纵,打开PushChatAppDelegate.m,批改 didFinishLaunchingWithOptions
-(BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{self.window.rootViewController =self.viewC[self.window
makeKeyAndVisible];//
通知设备须要接管推送通知 Let the device
know we want to receive push notifications[[UIApplication
sharedApplication]
registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];return YES;}
调用registerForRemoteNotificationTypes
通知体系应用是须要接管推送信息的。
在你的设备上编译运行应用,模仿器是不支撑推送信息的。XCode应当会主动选择设备文件,若是呈现签名错误,你须要在&Code Signing build
settings手动选择之前下载的设备文件。应用启动时会注册推送通知办事,弹出下面的确认窗口提示用户容许此应用接管推送通知办事。
应用只会提示询问一次,若是用户选择接管,设备就一切伏贴了。若是用户选择了拒绝,应用将永远无法接管到信息,用户可以在设备的设置项目中批改此项设定。
应用的名称将会添加到设置法度中的通知项面前目今,用户可以便利地在这里开启或封闭或自定义接管信息的种类和体式格式。
应用也可以经由过程法度来激活具体的提示体式格式:
UIRemoteNotificationType enabledTypes
=[[UIApplication sharedApplication]
enabledRemoteNotificationTypes];
还有额外的一件事,为了发送信息到指定的手机,我们还须要一些操纵:
-(void)application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{NSLog(@"我的设备ID: %@",
deviceToken);}-(void)application:(UIApplication*)application
didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{NSLog(@"注册失败,无法获取设备ID, 具体错误:
%@", error);}
当应用注册推送办事成功时,就可以获取用户设备辨认ID(Token
ID),这是对应你的设备一个32位的独一编码,你可以懂得为推送信息的地址。
运行应用,在XCode的终端窗口你可以看到以下信息:
我的设备ID:&740f4707
bebcf74f 9b7c25d4 8ef6aa01d a5ddb387 462c7eaf
设备辨认ID(Token ID)是加密的数据布局,储蓄在NSData对象中。这里你知道它是32位长度就够了,上方你看到的是64个16进制的字符,我们将应用这个格局,当然&&和空格要过滤掉。
在模仿器中运行,didFailToRegisterForRemoteNotificationsWithError会返回错误:method will be called as push notifications are
not supported in the simulator.
应用筹办好了,就差最后一件事了。
发送我们的推送通知
之前我们都谈到要有办事器或办事组件来实现推送通知的发送和经管,在这里,我们先不急着搭建办事器,这里有一个简单的PHP脚本用来建树到APNS的连接和发送测试信息到之前的设备上。
你可以在MAC上直接应用:
下载SimplePush源代码&解开后,批改simplepush.php中的以下几个处所:
// Put your device token here
¥deviceToken
=""0f744707bebcf74f9b7c25d48eaa01da5ddb387462c7eaf61bbad78"";//
Put your private key""s passphrase here:
¥passphrase =""pushchat"";// Put your alert message
¥message =""My first push
notification!"";
复制设备辨认ID到变量¥deviceToken,别留下任何一个空格,完完全全就是64个16进制字符;指定私钥的口令和要发送的信息内容;复制ck.pem到脚本地点文件夹,ck.pem包含了证书和私钥。
开启终端法度( Terminal):
¥ php
simplepush.php
若是一切OK的话,脚本将返回:
Connected to APNS
Message successfully delivered
几秒钟内,你应当可以在设备上收到推送的信息了。
重视若是应用在开启运行状况的话,你看不到任何信息,信息被直接发送给应用本身,然则我们还没有经由过程编程来处理惩罚收到的信息,不信你可以再试一下。
若是PHP脚本退出并返回错误信息,请搜检PEM文件是否正确、连接沙盒办事器是否正常。
PHP脚本具体的实现过程就不评论辩论了,有爱好的或须要自行搭建办事器来经管发送推送通知的可以看此教程的下篇(请找原出处)。
如今你已经成功地实现了应用的推送通知办事,在此教程的下篇中,我们来开辟一个简单的短消息应用(PushChat)来实现用户之间的推送通知功能。还有完全用于在后台不中断供给推送通知办事的办事组件API。
迎接向我们提问交换,感谢。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果手机怎么更改推送通知的铃声?_百度知道
苹果手机怎么更改推送通知的铃声?
我有更好的答案
在设置中有声音,选择通知铃声,选一个就行了
91手机助手里面去弄
其他类似问题
为您推荐:
苹果手机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁各位高手,苹果手机如何设置,才能使收到的推送通知,只有声音,而不震动_百度知道
各位高手,苹果手机如何设置,才能使收到的推送通知,只有声音,而不震动
提问者采纳
先打开设置再打开声音有一个震动你把第一个和第二个关掉就醒了
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
为您推荐:
其他5条回答
通用里面就有啊,或者你直接把左上角那个震动键改成非震动
哥们,是不是刚玩苹果,好好逐摸逐摸
苹果手机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁当前访客身份:游客 [
用心甘情愿的态度,过随遇而安的生活。
:请问有没有关于dispatch source部分的代码可以看...
:亲 ,egodatabase的连接地址 也是FMDB 连接哦...
:NSAutoreleasePool *pool = [[NSAutoreleasePool...
:给力 O(∩_∩)O哈哈~ 支持你啊
:这个是验证身份证号码吗?怎么没看到计算校验值的...
:谢谢,学习了!不知可有办法在主界面上输入帐号密...
今日访问:1
昨日访问:13
本周访问:51
本月访问:308
所有访问:24195
Apple推送通知服务教程
发表于3年前( 18:43)&&
阅读(1517)&|&评论()
0人收藏此文章,
学习怎样为你的iphone程序添加推送通知
这是由iOS教程组成员撰写的一篇有关推送通知的教程,是一位有着丰富经验的iOS开发者和设计者。
在iOS系统里,应用程序在后台运行的时候有很多事情都做不了(译者注:由于沙盒限制)。应用程序只允许在这个“沙盒”内做一些操作,这样可以减缓电池的消耗,延长电池的使用时间。
但是,假如用户现在没有在用你的程序,而你的程序恰好发生了一些有趣的事情,而你也想让用户知道,这时你该怎么做?
例如,用户收到了一条tweet的新消息,他们喜欢的队伍赢得了比赛,或者晚饭已经准备好了。因为应用现在没有在运行,程序就接收不到这些新消息。
幸运的是,苹果公司为这种情况提供了一个解决办法。你可以写一个服务器端的组件来解决这样的问题,而不是让应用不断的在后台运作,检查事件的发生。当一些有趣的事件发生的时候,服务器端的组件可以发送一个推送通知!
下面是推送通知可以做的三件事:
&显示一条短信息
&播放一个简短的提示声音
&在程序的图标上设置推送消息数量
你可以根据需要,随意组合以上三项功能;例如,你可以播放简短的提示声音和设置应用图标上推送消息的未读数量,但不显示消息。
在这两部分的系列教程里,你将通过创建一个简单使用APNS(苹果的推送通知)的app,来实现推送通知。
首先,在第一部分教程里面,你将学习怎么设置应用程序,来接受推送通知和一条测试消息。
这篇教程是为中高级iOS开发者写的。如果你只是一个iOS开发的初学者,应该先学习这个网站的其他教程。所以,对于初学者,强力推荐先学习下面的两篇教程:
闲话少说,让我们把完成它!
想让应用程序的推送功能正常工作,你需要相当多的努力,这个过程非常繁琐。以下是这个过程的概述图:
1.应用程序需要激活推送通知功能。在使用之前,用户需要确认他是否愿意接受这些推送功能。
2.应用程序接到一个“device token”。你可以认为“device token”是推送通知发送信息的目的地址。
3.应用程序会将“device token”发送给你的服务器
4.当你的应用程序发生了有趣的事情,你的服务器向 “苹果推送通知的服务器(Apple Push Notification Service,缩写,APSN)”发送通知。
5.APSN再向用户的设备(例如,iPhone,iPad等)发送通知。
当用户的设备接受到推送通知,将会显示提醒框,播放提示声音,更新图标的未读信息数目。用户可以通过点击提醒框来加载应用程序,苹果公司给推送通知加入了可选内容,你可以根据需求来操作推送通知。
当iOS4实现了本地通知和多任务,苹果的推送通知是否还有使用价值?当然有!
本地通知被定时事件调度限制,并且只有VOIP、导航、后台音频播放这些应用在后台没有被限制。如果当应用程序处于关闭状态时,你想将外部事件的发生通知给你的应用程序用户,仍然需要推送通知。
在这篇教程中,我将解释推送通知系统实现的细节以及如何在应用中建立推送。这里有很多要解释的,这需要(您)花点儿时间去明白。
你需要为推送做些什么
在你的应用中添加推送通知,你需要:
一台iPhone或者iPad&推送通知不能在模拟器上实现,所以你需要在设备上测试。
一个iOS开发者证书&你需要一个新的AppID和每个应用程序使用的推送证书,推送服务器需要的“SSL ”证书,你可在iOS开发网站上做这些。
如果你想跟随这篇教程的例子学习,你将需要创建你自己的推送证书和SSL证书,你不可以使用我的这些证书。因为获得正确的证书是很重要的,我将详细解释如何得到一个推送证书。
一个联网的服务器&推送通知通常是由服务器来发送的。对于开发,你可以使用一个Mac来代替服务器(我们将在教程中这样做),但是发布的产品,你至少需要类似VPS( Virtual Private Server )的服务器。
一个廉价的共享虚拟主机账户不能满足发布产品的需要。你需要在服务器的后台启动一个进程,安装一个SSL证书,并且能够在某个端口中能够外联TLS。
大部分的共享虚拟主机并不让你实现这些功能,即使如果申请的这些需求通过了。无论怎么样,我真的建议你使用一个VPS主机,像。
解析一个推送通知
你的服务器负责创建一个推送通知消息,所以了解一个推送通知消息的构成是有必要的。
一个推送通知是一个短信息,由“device token”,“payload–负载内容”,和其他的一些字节组成。“payload–负载内容”是我们感兴趣的部分,因为它包含着我们实际想发送出去的数据。
你的服务器必须提供“payload–负载内容”,它是以JSON的字典的数据格式来组织数据的。下面是一个很简单的推送消息payload:
{ &aps&: { &alert&: &Hello, world!&, &sound&: &default& } }
对于不了解JSON的人,一个block的划分由一对花括号“{}”包裹,其中包含一个由“键/值 (key/value)”对组成的“字典”,(就像NSDictionary)。
“payload–负载内容”就是一个“字典”,包含了至少一个“aps”项,“aps”本身也是一个“字典”。在我们的例子中,“aps”包含“alert”和“sound”字段。当这个推送通知被接收后,它将显示一个包含“Hello, world!”内容的提醒框,并且播放标准的提示音。
你可以向“aps”添加另外的选项,来配置通知,例如
{ &aps&: { &alert&: { &action-loc-key&: &Open&, &body&: &Hello, world!& }, &badge&: 2 } }
现在“alert”是一个字典。”action-loc-key” 对应的value替代了“View”按钮上的文本内容,”badge”字段包含的数字将被显示在应用图标上,这个通知不会播放提示音。
有很多途径去设置JSON的“payload–负载”内容,你可以改变播放声音,你可以提供本地化的文本,并且添加自己的字段。更多信息,请详见官方。
推送通知的目标就是精短;“payload–负载内容”的大小不能超过256个字节。这样留给你的空间和一条短消息或者一个tweet消息的大小一样。一个小型的推送服务不会在换行符和空格上浪费空间,这样一条推送就像下面所显示的:
{“aps”:{“alert”:”Hello, world!”,”sound”:”default”}}
上面这条消息可读性比较低,但是它节省了足够的字节,所以牺牲可读性是值得的。如果一个推送通知的payload超过了256个字节,那么这个推送就不会被“APNS”接受。
关于推送通知常见的错误
推送通知是不可靠的
推送通知是不可靠的!即使APNS(Apple Push Notification Service苹果推送通知服务)服务器接受了推送通知,仍然无法保证该通知最终会被送达。
就你的服务器而言,推送通知会被发出并且遗忘掉;当你将通知发送到APNS后,没有办法查出它所处的状态。通知送达的时间也从几秒到半小时不等。
同样,用户的iPhone不是所有时间都可以收到推送通知。比如,因为指定的端口被封,手机处于一个不允许和APNS连接的WIFI网络。或者手机已经关机了。
APNS将会在手机连接到可用网络后下发从该机器收到的最后一条通知,但是只会尝试有限的时间。一旦发送超时,此条通知就会永远丢失!
After looking at the APNS Server Bill
推送通知会使开销很大!如果你掌控了需要推送的内容,在你的应用中加入推送功能相当容易和廉价,但是当你有好多用户和数据需要轮询的时候,这个功能就会使得服务器开销庞大(译者注:不一定指价格,包括是资源消耗)。
比如,你打算在自己的RSS订阅更新的时候通知用户,这样做没问题。因为你控制着RSS订阅,并且知道它何时发生变化——当你更新网站内容时——于是你的服务器可以在合适的时候发出通知。
但是如果你的应用是一款RSS阅读器,允许用户添加自定义的链接呢?这种情况下,你需要构建一些机制去检测那些订阅的更新。
实际上,这意味着你的服务器为了检查那些订阅的变化,需要不停的轮询它们。如果你拥有很多用户,你可能不得不安装一堆新服务器去处理这些工作和满足带宽需求。对于这类应用,推送会变得异常昂贵,可能不值得去做。
好了,理论上足够了。下面到时间来学习如何使用推送了。在我们投入到美好的事物——编程!之前——有一些无聊的搭建环境的工作需要在iOS Provisioning Portal上完成,所以让我们尽快完成它。
Provisioning Profiles和证书,天哪!
APNS需要一个证书
在你的应用中使用推送通知,需要用一个配置过推送功能的provisioning profile来签名。此外,你服务器所有与APNS的通讯都需要进行SSL证书签名。
Provisioning profile和SSL证书紧密联系在一起,并且只对一个App ID有效。这个保护措施可以保证只有你的服务器可以发推送通知到你的应用,其它服务器不可以。
正如你所知道的,应用程序在开发和发布阶段使用不同的provisioning profiles。同样,推送服务器的证书也有两种:
&&Development. 如果你的应用程序运行在debug模式,并且使用的是Development provisioning profile (Code Signing Identity 是 “iPhone Developer”)签名的,你的服务器必须使用Development证书。
&&Production. 使用Ad Hoc方式发布的,或发布在App Store(Code Signing Identify 是 “iPhone Distribution”)上的应用程序,必须和使用Production证书签名的服务器通讯。如果这里面有不匹配,推送通知将无法送达你的应用。
在这篇教程里,我们不需要为分发profiles和证书烦恼,只需要使用Development版本的即可。
生成证书签名请求(Certificate Signing Request, CSR)
还记得你在注册成为iOS开发者之后,如何去iOS Provisioning Portal生成一个开发证书吗?如果记得,下面的步骤应该会比较熟悉。不过,我仍然建议你准确地按照步骤来做。因为大多数在实现推送通知过程中遇到的问题,都是由于证书问题引起的。
数字证书基于公钥-私钥加密方法。你不需要知道任何关于证书的加密方法,但是你要知道证书一直会与一个私钥搭配使用。
证书是密钥对的非秘密的部分。将它发送给其它人是安全的,比如通过SSL通讯的过程中就会包含证书。然而,对于私钥,当然是私有的。它是秘密的。你的私钥只对你有用,对其他人没用。要重视的是:如果你没有私钥的话,就无法使用证书。
每当申请一个数字证书的时候,你需要提供一个证书签名请求,简称CSR。当你创建了CSR后,会生成一个新的私钥保存到keychain应用程序中。然后你将CSR发送到一个证书颁发机构(目前情况下就是iOS Developer Portal),它会根据CSR中的信息生成SSL证书。
打开Mac中的Keychain Access程序(在Applications/Utilities下),选择菜单中的Request a Certificate from a Certificate Authority…
如果菜单中没有“Request a Certificate from a Certificate Authority with key”选项,就先去下载安装。并且确认Keychain Access窗口里没有私钥被选中。
现在,你应该会看到下面的窗口:
在里面输入你的邮件地址,听有人推荐说最好使用和注册IOS开发者证号同样的邮件地址,但看起来任何邮件地址都可以。在Common Name中输入“PushChat”。你可以输入任何字符串,但最好是有意义的。这会使你以后容易查找这个私钥。
选择Saved to disk选项,点击Continue。将文件保存为“PushChat.certSigningRequest”。
如果你切换到Keychain Access软件的Keys标签,你将会看到一个新的私钥出现在你的钥匙串里。右键点击它,选择Export。
将私钥保存为“PushChatKey.p12”,输入一个密码短语。
为了教程的方便,我用了密码短语“pushchat”来保护这个p12文件,但是你应该选择一些更不容易被猜出的。记住,私钥是要保密的。另外,一定要选择你能记住的密码短语,否则以后就无法使用这个密钥了。
一个非常简单的程序
目前还没有激动人心的地方,但是前面的那些准备工作是必须的。我将会详细介绍如何生成证书,因为它不是你每天都要做的,但是没有证书推送就不能工作。
因为可以连接到沙盒服务器,所以证明我们的证书是有效的。让我们来测试一下,是不是真的能推送一些消息!
点击Xcode然后选择File,创建一个新的Project。选择View-based Application模板,然后下一步
在文本框填入下列值:
& Product Name项目名:PushChat
& Company Identifier公司ID: com.hollance
& Device Family设备: iPhone
Bundle ID由项目名称和公司ID组成。我的项目ID叫“com.hollance.PushChat”
你应该让你的Product Name和Company Identifier 与你早先用App ID在Provisioning Portal 注册的相一致(com.yourname.PushChat).
完成后打开PushChatAppDelegate.m,将didFinishLaunchingWithOptions 方法改成下面的样子:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; //让设备知道我们想要收到推送通知 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; return YES; }
调用registerForRemoteNotificationTypes 告诉OS 这个App想要接收推送消息。
编译运行。你需要在真机上运行这个程序,因为模拟器不支持推送通知。
Xcode应该会自动选择新的provisioning profile。如果你得到一个签名错误,那么请确认在Code Signing build settings中选择了正确的profile。
当应用程序启动了推送通知,它会显示一个消息通知用户,它想推送通知。
这个app推送请求只出现一次。如果用户选“确定”,那么我们的推送通知就全设置好了。
然而,如果他们选择“不允许”,那么我们的应用程序将不会接收到推送通知。用户可以在手机设置里改变他们的决定。
你可以在setting -& Notifications里面找到你的应用程序,用户可以在这里启用或禁用
应用程序的通知,包括标记、声音和警报。
你的app可以查看哪些推送类型被启用,用以下代码来查看
UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
为了能收到推送消息,我们还要在app中添加一些内容。将下列代码添加到PushChatAppDelegate.m中:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { NSLog(@”My token is: %@”, deviceToken); } - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { NSLog(@&Failed to get token, error: %@&, error); }
当你的应用程序注册远程通知时,它将会尝试获得一个“设备标记(device token)”。
这是一个32字节数字,标识你的设备的唯一性。 可以把device token理解为推送消息的接收地址。
再次运行程序,你应该能在Xcode的控制台窗口看到下面这个:
My token is:
&740f4707 bebcf74f 9b7c25d4 8ef6aa01d a5ddb387 462c7eaf 61bb78ad&
这个标识是一个封装的二进制数据结构,装入一个NSData对象里。苹果不希望你看见它的内部信息,就我们而言知道它是32字节长就够了。
正如你上面所看到的,标识也可用64位十六进制字符表示,我们将用这种格式使用设备标识,当然还要去掉分隔符和空格。
如果你在模拟器上运行这个程序,由于你的模拟器不支持推送通知,didFailToRegisterForRemoteNotificationsWithError方法将被调用。
这个应用就是这样。还有一件事要做,之后我们马上就可以看到一些推送通知,立即行动!
发送我们第一个推送通知
我之前已经提到了几次,你需要创建一个服务器,它将推送通知给你的app。
第一次测试程序,我们不会去建立一个服务器。相反,我会给你们一个非常简单的PHP脚本,
,来建立一个连接到APNS并发送一个推送通知到您所指定的设备。你可以直接在mac电脑上运行这个脚本
下载这些并解压缩,你需要在simplepush.php做些改变。
//把你的设备标识写在这里(没有空格): $deviceToken = '0f744707bebcf74f9b7c25d48eaa01da5ddbeaf61bbad78'; //密码放在这里 $passphrase = 'pushchat'; // 把你的推送消息放在这里: $message = 'My first push notification!';
你需要从app中拷贝device token到$deviceToken变量。确定删掉了空格以及分隔符。它应该是64位的十六进制字符。把你私钥密码短语放到$passphrase变量,以及你想发送的信息放到$message中。
拷贝你的ck.pem 文件到SimplePush目录,记住,这个ck.pem文件同时包含你的证书和私钥。
然后打开一个终端并键入:
$ php simplepush.php
如果一切顺利,脚本应该会显示:
Connected to APNS
Message successfully delivered
几秒钟内,你应该会收到你的第一个推送通知:
注意, 当应用程序是开着的你不会看到任何东西。消息传过来了,但是我们在app中没有做任何处理消息的方法。
关闭应用程序,然后再试一次。
如果显示一些错误信息,simplepush.php脚本退出,检查你是否正确制作PEM文件,
并且你能正确的连接到沙盒服务器 (见上文)。
现在,脚本究竟做了什么并不重要。在这个系列的第二部分,我们会建立一个真正的推送服务器,到那时候我们会就此做更多的说明。
此时,你已经成功建立了一个app来接收推送通知,并且通过自定义的PHP代码发送了第一条推送通知。
稍后请看教程系列的Part2。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读}

我要回帖

更多关于 苹果4s声音模式在哪里 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信