摘要: Handoff的简单应用:实现在手机App中浏览某商品详情页面时,在Mac上使用浏览器打开相应的商品页面。
原文地址:http://www.zlucy.com/archives/217/
官方文档:Handoff Programming Guide
先说几句
Handoff 是在iOS 8和OS X v10.10中引入的一种功能,可以在与同一用户相关联的多个设备之间传输用户活动。 在iOS 9和OS X v10.11中,Handoff可以帮助您的应用程序参与搜索,从而可以将用户活动和应用程序状态指定为可搜索的。 例如,当Spotlight搜索结果或Siri建议中显示可搜索的活动或状态时,用户可以点击结果返回到应用中的相关区域。
Handoff可以实现在Mac、iPhone、iPad和iPod之间同步用户操作,便于用户无缝切换设备。例如,在Mac上的地图应用中规划好路线,通过Handoff功能,在iPhone上打开地图应用即可看到刚才规划好的路线。又或者,在移动设备上通过某购物App浏览商品详情,在Mac上可打开相应的网页。
本次就实现在手机App中浏览某商品详情页面时,在Mac上使用浏览器打开相应的商品页面。
功能实现
由于Handoff功能API是在iOS 8后才加入,所以要实现此功能必须使用高于iOS 8的开发环境。且eligibleForHandoff
属性为iOS 9加入,所以,实现此功能需iOS 9以上。
创建用户活跃对象
NSUserActivity *myActivity = [[NSUserActivity alloc] initWithActivityType: @"com.myCompany.myBrowser.browsing"];
myActivity.userInfo = @{ ... };
myActivity.title = @"Browsing";
设置此对象为Handoff可用
myActivity.eligibleForHandoff = YES;
设置WebURL
NSString *URLString = [NSString stringWithFormat:@"http://www.myCompany.com/good?id=%@", goodModel.id];
myActivity.webpageURL = [NSURL URLWithString:URLString];
将此活动设置为当前活跃状态
[myActivity becomeCurrent];
当使用完此活跃对象时,应调用invalidate
方法,使此对象从所有设备消失,并释放资源。
[myActivity invalidate];
再说几句
iOS版本判断方法
使用NSFoundationVersionNumber
#define IS_IOS_9_0 ((NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_x_Max) ? YES : NO)
if (IS_IOS_9_0) {
...
}
使用@available()
if (@available(iOS 11.0, *)) {
//...
} else {
// Fallback on earlier versions
}
@available()
是在iOS 11中公开的函数,据推测,在iOS 11前为私有函数。根据@available
在Swift 2.0 中的用法,可知@available(iOS 9, *)
必须包含至少2个特性参数,其中iOS 9
表示必须在 iOS 9 版本以上才可用。
另外一个特性参数:星号(*),表示包含了所有平台,目前有以下几个平台:
- iOS
- iOSApplicationExtension
- OSX
- OSXApplicationExtension
- watchOS
- watchOSApplicationExtension
- tvOS
- tvOSApplicationExtension
一般来讲,如果没有特殊的情况,都使用*
表示全平台。