iOS10 更新总结

2016-08-17  本文已影响1057人  vicxxc

#### iOS 10 ****重要更新

##### Callkit
- http://www.jianshu.com/p/2f3202b5e758
- 让用户查看和接听电话的锁屏和VoIP管理联系人电话在手机APP的收藏夹和历史的观点
- WWDC Video
- 扩展AppExtensions 功能,可以辨识原生电话的骚扰电话功能

- [WWDC Video](https://developer.apple.com/videos/play/wwdc2016/217/)

##### Siri Kit

##### UserNotification.framework

获取用户通知权限
 //iOS 10 before
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [application registerUserNotificationSettings:settings];

    //iOS 10
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"request authorization succeeded!");
        }
    }];
开放获取用户设置信息

iOS 7
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

iOS 8
  UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
        
setting.types == UIUserNotificationTypeBadge || setting.types == UIUserNotificationTypeSound || setting.types == UIUserNotificationTypeAlert || setting.types != UIUserNotificationTypeNone) 

iOS 10
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
        NSLog(@"%@",settings);
}];

iOS 10打印:
<UNNotificationSettings: 0x16567310; 
authorizationStatus: Authorized, 
notificationCenterSetting: Enabled, 
soundSetting: Enabled, 
badgeSetting: Enabled, 
lockScreenSetting: Enabled, 
alertSetting: NotSupported,
carPlaySetting: Enabled, 
alertStyle: Banner>

//Local Notification
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"Introduction to Notifications";
content.subtitle = @"Session 707";
content.body = @"Woah! These new notifications look amazing! Don’t you agree?";
content.badge = @1;

//Remote Notification
iOS10 before
{ 
    action =     { 
        type = 4; 
    }; 
    aps =     { 
        alert = "hello, everyone"; 
        badge = 4; 
    }; 
} 
iOS 10
{
"aps" : {
    "alert" : { 
         "title" : "Introduction to Notifications", 
         "subtitle" : "Session 707",         
         "body" : "Woah! These new notifications look amazing! Don’t you agree?"
                },
    "badge" : 1
        },
}
UNTimeIntervalNotificationTrigger //定时器提醒
 UNCalendarNotificationTrigger    // 固定时间提醒 类似闹钟
 UNLocationNotificationTrigger    // 位置提醒
处理即将发出的推送
@interface AppDelegate () <UNUserNotificationCenterDelegate>

-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    只显示 alert 和 sound ,而忽略 badge
    completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionSound);

}
Speech.framework
let recognizer = SFSpeechRecognizer()
let request = SFSpeechURLRecognitionRequest(url: audioFileURL)
recognizer?.recognitionTask(with: request, resultHandler: { (result, error) in
     print (result?.bestTranscription.formattedString)
})

++扩展阅读:++

命名粘贴板
粘贴板可能是公共的,也可能是私有的。公共粘贴板被称为系统粘贴板;
私有粘贴板则由应用程序自行创建,因此被称为应用程序粘贴板。
粘贴板必须有唯一的名字。UIPasteboard定义了两个系统粘贴板,每个都有自己的名字和用途:

UIPasteboardNameGeneral用于剪切、拷贝、和粘贴操作,涉及到广泛的数据类型。
您可以通过该类的generalPasteboard类方法来取得代表通用(General)粘贴板的单件对象。
UIPasteboardNameFind用于检索操作。当前用户在检索条(UISearchBar)键入的字符串会
被写入到这个粘贴板中,因此可以在不同的应用程序中共享。您可以通过调用
pasteboardWithName:create:类方法,
并在名字参数中传入UIPasteboardNameFind值来取得代表检索粘贴板的对象。
VideoSubscriberAccount.framework

iOS版10引入了视频用户的帐户框架( VideoSubscriberAccount.framework ),以帮助支持流式身份验证或认证视频点播(也称为电视无处不在)与有线电视或卫星电视提供商进行身份验证的应用程序。使用本框架的API可以帮助您支持单一登录体验中,用户登录一次解锁所有他们的订阅支持流媒体视频应用程序的访问。

应用扩展
- iOS的10介绍了,您可以创建一个应用程序扩展了一些新的扩展点,如:
- Call Directory
- Intents
- Intents UI
- Messages
- Notification Content
- Notification Service
- Sticker Pack (iMessage) 

此外,iOS 10包含了如下的第三方键盘 app extensions的改进:
你可以使用 UITextDocumentProxy
类中的 documentInputMode 属性,来自动检测文档的输入语言,并且改变你的键盘 extension来符合这个语言(如果支持的话)。当你用这种方式决定输入的语言时, 你可以做每一种语言的键盘切换,比如为 Messages内建的。
新的 handleInputModeListFromView:withEvent: 方法让键盘 extension 显示系统的键盘选择菜单(即地球标志的菜单).
键盘 extension 必须放置地球标志和系统标志相同的位置。此外,如果你需要提供一个自定义的按键来启动键盘设置,例如,你应该把这个按键放在系统键盘听写键的相同位置。
##### Widget

##### APP ****搜索的改进

iOS 10 和 Core Spotlight框架介绍了几个 App搜索的改进点:

新的 CSSearchQuery 类支持应用内内容搜索,使用现有的 Core Spotlight APIs。使用这个 API可以消除需要保持你自己单独的搜索索引,让你发挥 Spotlight的强大搜索技术和匹配规则,允许用户搜索内容不离开你的 App,就像他们在 Mail, Messages,和 Notes.

在 iOS 9中,使用搜索 API(比如 Core Spotlight, NSUserActivity 和 web标记) 在你的 App中,让用户使用Spotlight 和 Safari搜索界面来搜索索引的内容。在 iOS 10中,你可以使用新的 Core Spotlight 符号,当用户打开你的 App时候,用户可以继续使用 Spotlight进行搜索。要启用这个功能,在 Info.plist 文件中添加 CoreSpotlightContinuation 键,并且设置它的值为 YES,然后更新你的代码来处理一个 CSQueryContinuationActionType 类型的活动延续。在 application:continueUserActivity:restorationHandler: 方法中收到的 NSUserActivity 对象中的用户信息字典包含了 CSSearchQueryString 键,它的值是一个字符串,表示用户的查询。

iOS 10 引入了一个不同的私人方式来帮助提高你的 App的内容在搜索结果中的排名。 iOS 提交一部分差分隐私到 Apple的服务器随着用户使用你的 App 以及 NSUserActivity 对象包含深度链接地址并且它们的 eligibleForPublicIndexing 属性设置为 YES 被提交到 iOS中。差分隐形散列允许 Apple统计流行的深度链接的频率,而不曾与用户关联的链接进行访问。

当你使用 App 搜索 API 验证工具来测试你的网站标记和深度链接,现在展示你的结果的可视化表示,包括支持的标记,比如 Schema.org 中定义的。验证工具可以帮你看到 Applebot web爬虫索引信息,比如标题,描述,URL和其他支持的元素。你可以在这里获取这个验证工具: https://search.developer.apple.com/appsearch-validation-tool. 更多关于支持深度链接和添加标记,详见: Mark Up Web Content.

学习如何让你的网站中的图片在 Messages App内可搜索,详见 Integrating with the Messages App.

##### Apple Pay ****的改进
在 iOS 10中,用户可以通过 Siri和 Maps使用网页版的 Apple Pay 来便捷安全的完成支付。对于开发者来说, iOS 10 引入了新的 API,你可以在代码中使用运行在 iOS和 watchOS上,支持动态支付网络的能力和一个新的沙盒测试环境。

iOS 10 引入了新的 API,帮助你将 Apple Pay 直接引入你的网站。当你在你的网站支持 Apple Pay,用户在 iOS或者 OS X上通过 Safari浏览的时候,可以通过它们的 iPhone或 Apple Watch来使用 Apple Pay上的信用卡进行支付。 详见 ApplePay JS Framework Reference.

PassKit框架 (PassKit.framework) 介绍了让你在 UIKit不可用的地方支持 Apple Pay的 API。具体来说, PKPaymentAuthorizationController 和 PKPaymentAuthorizationControllerDelegate 使得 PKPaymentAuthorizationViewController 提供的功能以及它的 delegate 可用,而不需要 UIKit。尽管新的 API 需要在特定的意图下在 watchOS上提供 Apple Pay,还是建议你在代码的任何地方采用它。这样你就可以用一套基础代码来广泛提供 Apple Pay支持。(更多关于意图和 Siri集成,详见 SiriKit.)

PassKit 框架还增加了新的功能,让信用卡发行机构在它们的 App中展示他们的信用卡。具体来说, PKPaymentButtonTypeInStore 按钮类型允许你为信用卡展示一个 Apple Pay 按钮, presentPaymentPass: 方法允许你以编程方式展示信用卡。 ( presentPaymentPass: 方法定义在 PKPassLibrary中)。

当一个新的支付网络可用时,你的 App可用自动支持新的网络,而不需要修改和重新编译你的 App。availableNetworks 方法允许你在运行时发现用户设备可用的网络。此外, supportedNetworks 属性被扩展了,以便可以携带一些支付服务提供商的名字作为参数。然后你的 App自动支持任何支付提供商支持的网络。详见https://developer.apple.com/apple-pay/.

iOS 10 引入了一个新的测试环境,它允许你直接在设备上提供测试信用卡。测试环境返回加密后的测试支付数据。要使用这种环境,遵循以下步骤:
在 iTunes Connect上创建一个测试 iCloud账号
在你的设备上登录该账号
设置测试所需的区域
使用 https://developer.apple.com/apple-pay/ 上列举的测试信用卡
注意: 当你切换 iCloud账号,环境自动切换。你还必须在实际生产环境中测试支付。

##### ****其他框架更新

##### Deprecated APIs

上一篇下一篇

猜你喜欢

热点阅读