iOS
Swift
AppleWatch

Handoffを利用してSafariでウェブページを開く

More than 1 year has passed since last update.

はじめに

Hnadoffとは、iOS 8を搭載したデバイスとOS X YosemiteをインストールしたMacが近くにあれば、一方のデバイスで作業した内容をもう一方のデバイスに引き継ぐ機能です。
例えば、iPhoneで書き始めたメールの続きをMacで書き上げることができます。

Apple - iOS 8 - 連携

この機能を自分のアプリに組み込むことができます。

HandoffにはアプリからSafari、アプリからアプリ、Safariからアプリの3種類があります。
今回は一番簡単なHandoffを利用してアプリからSafariでウェブページを開いてみます。

Handoffに対応したiOSデバイスとMacが必要です。
iOSデバイスとMacで同じApple IDを使ってサインします。
iOSデバイスとMacのWi-FiとBluetoothをオンにします。

iPhoneから

iOSアプリにHandoffを実装してみます。

ViewController.swift
import UIKit

class ViewController: UIViewController {

    var activity:NSUserActivity = NSUserActivity(activityType: "com.example")
    override func viewDidLoad() {
        super.viewDidLoad()

        self.activity.webpageURL = NSURL(string: "http://www.google.com/")
        self.activity.title = "Google"
        self.activity.becomeCurrent()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

実行するとOS XのDockにiPhoneマークがついたSafariが表示されます。
クリックするとSafariが起動してウェブページ(今回は http://www.google.com/ )が開きます。

Handoff1

Apple Watchから

次にApple Watchのアプリに実装してみます。

InterfaceController.swift
import WatchKit
import Foundation


class InterfaceController: WKInterfaceController {

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)


    }

    override func willActivate() {
        super.willActivate()

        self.updateUserActivity("com.example", userInfo: nil, webpageURL: NSURL(string: "http://www.google.com/"))
    }

    override func didDeactivate() {
        super.didDeactivate()
    }

}

NSUserActivityではなくfunc updateUserActivity(_ type: String, userInfo userInfo: [NSObject : AnyObject]?, webpageURL webpageURL: NSURL?) を利用します。

Apple Watch(実機)で実行します。iPhoneのロック画面の左下にSafariのアイコンが表示されます。
Safariのアイコンを上にスワイプするとSafariが起動してウェブページが開きます。

Handoff2

このとき、OS XのDockにはApple WatchマークがついたSafariが表示されます。

Handoff3