你的位置:首页 > 软件开发 > 操作系统 > Handoff使用指南

Handoff使用指南

发布时间:2016-08-26 19:00:05
Handoff简介Handoff是iOS 8 和 OS X v10.10中引入的功能,可以让同一个用户在多台设备间传递项目。In iOS 9 and OS X v10.11 支持了Spotlight中搜索并打开应用。Handoff交互:在你的app中为每一个活动创建一个user ...

Handoff使用指南

Handoff简介

Handoff是iOS 8 和 OS X v10.10中引入的功能,可以让同一个用户在多台设备间传递项目。In iOS 9 and OS X v10.11 支持了Spotlight中搜索并打开应用。

Handoff交互:

  1. 在你的app中为每一个活动创建一个user activity 对象
  2. 定期使用用户的信息更新user activity对象
  3. 当用户请求时在不同的设备上继续用户活动

在iOS中这个user activity object是UIKit中的 NSUserActivity类。

Handoff需要的硬性条件:

  • 互通的所有设备必须支持 Buletooth LE 4.0,Handoff使用BLE信号来传递用户活动数据。

  • 所有设备必须连到同一个iCloud账户。

  • 当然你还得保证当前设备的Handoff功能打开了(iOS:设置->通用->Handoff 与建议的应用程序。 Mac:系统偏好设置->通用,倒数第二栏有个选项,"允许这台Mac和iCloud设备之间使用Handoff")

BLE并不像传统的蓝牙,并不需要人工手动进行配对,只要打开就行了,所有的配对数据传输都是自动完成的;设备并不一定需要连在同一个WIFI网络中,Handoff的活动基础数据通过BLE进行传递,较大的数据通过iCloud同步(通过网络streams,比如邮件中有个图片)。

Handoff使用指南

工作流程

Handoff编程的核心类便是NSUserActivity了,代表着一个用户的活动,每一个Activity都有一个activityType,用来标识Activity的类型。当App间进行Handoff的话,需要满足下面几个条件:

  • 在iCloud 中使用相同的 Apple ID登录
  • 和发布Activity的App拥有相同的TeamID

  • 在应用中你想要支持的Target的Info.plist文件中加入活动标识NSUserActivityTypes

第三方开发的app必须通过App Store发布或者使用注册开发者签名。启动了Handoff功能的app,在使用期间Handoff消息会通过BLE进行分发,iOS设备接收到消息后会检查与起始app是否具有相同TeamID以及相同NSUserActivityTypes,如果找到了则在“另一部”设备中显示推荐app。

User Activity 对象

NSUserActivity对象存储用户的活动信息,实现在不同设备上的继续工作。起始app必须显式调用becomeCurrent或者基于文件的app(Document-based apps)进入前台时,给在视图层级中的UIViewController对象设置文件的NSUserActivity对象来启用Handoff功能。将其设置resignCurrent或者Document-based app的NSUserActivity对象设置为nil停用。

NSUserActivity对象的唯一标示是 activityType and title 属性(document name or web page title)。通过eligibleForSearch、 keywords and contentAttributeSet 属性的支持,可以使其app支持Spotlight搜索结果中显示。通过 expirationDate设置失效时间。

NSUserActivity对象通过userInfo dictionary 属性来存储并共享数据信息。

User Activity 同步机制

User Activity的同步机制分两种:延时更新(lazy updating )和系统管理。

  • lazy updating 
    • 需要同步的用户数据有更新时,将User Activity对象的 needsSave属性设置为YES
    • NSUserActivity将要共享数据之前,会调用起始app的userActivityWillSave: 方法(NSUserActivityDelegate),在此方法中通过NSUserActivity method addUserInfoEntriesFromDictionary: 方法merge相关状态信息到userInfo 对象中。调用完此方法,系统会将needsSave属性重置为NO。
  • 系统管理
    • 当响应者知道activity的状态已修改,它必须设置needsSave设置为YES(When the responder knows that the activity state is dirty, it must set the object’s needsSave property to YES. )。系统会在合适的时间自动同步NSUserActivity 对象,首先会通过updateUserActivityState:回调给响应者更新activity’s state的机会。你的响应者子类必须重写updateUserActivityState:方法来给user activity对象添加状态数据(在此方法中通过NSUserActivity method addUserInfoEntriesFromDictionary: 方法merge相关状态信息到userInfo 对象中)。如果多个响应者共用一个NSUserActivity对象,当系统更新user activity对象时,它们都会收到updateUserActivityState:回调。在更新回调发送之前,activity对象的userInfo字典会被清空。

使用App Delegate来继续activity的使用

在非document app中,通过Handoff启动响应者app的时候,会在app的delegate中收到application:willContinueUserActivityWithType:和application:continueUserActivity:restorationHandler:消息,分四种情况处理:

  1. 普通模式,正常处理
    1.   
      func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool {  self.window?.rootViewController?.restoreUserActivityState(userActivity)  return true}override func restoreUserActivityState(activity: NSUserActivity) {  self.noteTitleField.text = activity.userInfo?["title"] as! String  self.noteContentView.text = activity.userInfo?["content"] as! String}

       

      海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

      原标题:Handoff使用指南

      关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录