iOS开发中push方式被啥取代
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发中push方式被啥取代相关的知识,希望对你有一定的参考价值。
Deprecated
Push segues are deprecated in ios8.0 and later
IOS开发中PUSH通过开发者push证书实现的,要实现通知推送只能使用push,无其他代替方法。
PUSH原理及实现方法:
原理图:
注:
Provider :应用自己的服务器;
APNS :Apple Push Notification Service的简称,苹果的PUSH服务器;
实现方法:
一、生成push证书。
1、用付费帐号登录到IOS开发者中心。
2、生成开发证书,生成开发证书过程中需要通过Keychain生成一个CSR文件,默认名为CertificateSigningRequest.certSigningRequest,这个文件将在生成push证书的时候用到。
二、创建一个App ID。
注:要用push功能的Bundle Identifier一定不能出现通配符,比如com.mycompany.* ,这样的名字是不能使用push的。
创建过程中Description可以任意填写,比如叫 push_demo ;
Bundle Identifier一般用 com.company.appname 这样的格式,例如com.mycompany.demo ;
三、生成Push SSL Certificate。
1、打开 Enable for Apple Push Notification service 选项,该选项下有 Development Push SSL Certificate 和 Production Push SSL Certificate 两个SSL Certificate可以配置,前面一个是用来的开发的push证书,后面一个是用来发布的。我们以开发push证书为例,点击 Development Push SSL Certificate -> Configure ,后面会要求选择CSR文件,这就是生成开发证书时的CertificateSigningRequest.certSigningRequest文件,选择好CSR后就生成好相应的SSL Certificate了。下载下来,保存名为 aps_developer.cer 。
2、从Keychain中导出私钥、设置好密码,命名为private_key.p12。
3、生成push证书。
将aps_developer.cer转成pem格式
openssl x509 -in aps_developer.cer -inform DER -out aps_developer.pem -outform PEM
将private_key.p12格式的私钥转换成private_key.pem
openssl pkcs12 -nocerts -out private_key.pem -in private_key.p12
4、这一步会要求输入p12私钥的密码,以及设置新生成的pem的密码。
5、创建用于服务端的SSL p12格式证书,命名为aps_developer.p12
openssl pkcs12 -export -in aps_developer.pem -inkey private_key.pem -certfile CertificateSigningRequest.certSigningRequest -name "aps_developer" -out aps_developer.p12
6、这一步会要求输入private_key.pem的密码,注意不是private_key.p12的密码。如果密码错误,或者CertificateSigningRequest.certSigningRequest文件不匹配都不能正常生成aps_developer.p12文件,如果生成的aps_developer.p12文件大小是0,说明生成过程中出了问题,请检查pem私钥、密码、以及CertificateSigningRequest.certSigningRequest是否正确。
aps_developer.p12就是Provider向APNS发送push消息需要的SSL证书。把这个证书和密码提供给服务端,服务端就可以发送push消息给APNS了。这时服务端已经可以工作了,但客户端还必须配置相应的Provisioning Profile才能启动应用的push功能。
服务器配置需注意的是,由于我们生成的是开发环境的push证书,所以服务器应该连接APNS的sandbox环境地址:gateway.sandbox.push.apple.com:2195 ,如果应用正式发布,就要连接正式环境,必须生成相应的发布证书,并连接APNS正式环境地址:gateway.push.apple.com:2195 。
CertificateSigningRequest.certSigningRequest
private_key.p12
aps_developer.cer
四、生成Provisioning Profile
1、新建Profile,命名为push_dev;
2、选择相应证书;
3、App ID选择push_demo;
4、选择设备;
5、下载并安装该Profile供开发使用;
6、Xcode证书设置、Info.plist设置
用Xcode打开客户端工程,设置Info.plist的Bundle identifier为com.mycompany.demo 。
打开工程设置,必须将证书设置为与push_dev关联的证书。
7、客户端获取deviceToken
服务端要发送push消息给某一设备还必须知道该设备的deviceToken。应用运行后获取到deviceToken,然后上传给服务器,下面介绍应用如何获取deviceToken。应用必须先注册使用push功能。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
// do something
// ...
在AppDelegate中添加下面方法来获取deviceToken:
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
NSLog(@"%@", token);
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
NSLog(@"%@", error);
应用获取到deviceToken后,上传给Provider,Provider就可以用这个deviceToken给这个设备push消息了。
参考技术A 没有其他取代的方法 参考技术B 没有被取代啊 参考技术C 没有被取代 参考技术D storyBoard里不推荐了,应该是用showNavigationItem iOS 11 Apple 方式中的 UISearchController
【中文标题】NavigationItem iOS 11 Apple 方式中的 UISearchController【英文标题】:UISearchController in NavigationItem iOS 11 Apple way 【发布时间】:2018-06-24 23:30:19 【问题描述】:在 iOS 11 中,Apple 提供了新的搜索栏,但在 iOS 11.2.2 中,当两个视图控制器都有 searchController 时,开发人员会出现 push\pop 动画错误。 Apple 在文件应用程序中展示了他们的愿景。 有人知道怎么做吗?
编辑#1
动画损坏的问题。 Broken UISearchBar animation embedded in NavigationItem
【问题讨论】:
您看到的“错误”到底是什么? “错误”将是如果我尝试使用本机方法进行类似操作。这是正确的方法,但我不知道它是怎么做到的 所以这显示了正确的方式并且看起来不错?您正在使用“本机”方法进行操作,但它不起作用?首先展示你得到了什么,然后是你正在使用的代码。 编辑过的帖子带有动画错误的链接 那么这是一个新问题,还是您正在寻找该问题的答案? 【参考方案1】:你可以在 ViewController 中添加一些代码 -viewDidLoad 一些代码行用于导航栏中的搜索栏
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .automatic
let search = UISearchController(searchResultsController: nil) // Declare the searchController
self.navigationItem.searchController = search
【讨论】:
以上是关于iOS开发中push方式被啥取代的主要内容,如果未能解决你的问题,请参考以下文章
ios8新特性:pushkit实战总结(voip开发者必读)