iOS开发之 Handoff 初学乍练

摘要: 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

一般来讲,如果没有特殊的情况,都使用*表示全平台。

你可能感兴趣的:(iOS开发之 Handoff 初学乍练)