4
2

More than 1 year has passed since last update.

iOS 15.4におけるSharePlayに関するアップデート(FaceTimeをアプリから開始など)

Posted at

以前の記事で、FaceTime参加者間でのデータ共有に向けてiOSアプリ内でSharePlayを統合させることについての完全ガイドを紹介しました。

この記事は次の事柄を取り上げます:

  • アプリ(iOS 15.4以降)から直接FaceTime通話をかける
  • シェアシート上のSharePlayオプション
  • SharePlayセッションを終了または退室
  • システムUIメッセージを伝える

アプリ(iOS 15.4以降)から直接FaceTime通話をかける

iOS 15.4 (現在ベータ版の段階) では、グループFaceTime通話を始めたい場合にもし進行中のFaceTime通話が無ければ、ユーザーを招待して通話を開始することができます。

システムがFaceTime参加者の提案リストを提示してくれて、連絡先アプリから招待する人を選び出すことができます。

これは、GroupActivitySharingControllerビューコントローラーを使用することによって達成されます。

if #available(iOS 15.4, *) {
    guard let sharingController = try? GroupActivitySharingController(GroupActivityDefinition()) else {
        return
    }
    self.present(sharingController, animated: true)
}

GroupActivityDefinitionは、GroupActivityタイプに準拠した構造体であるグループアクティビティの定義となります。

SwiftUI内では、この拡張機能を使用して、現在アクティブなキーウィンドウを取得し、ビューコントローラーを提示することができます:

extension UIApplication {
    var keyWindow: UIWindow? {
        return UIApplication.shared.connectedScenes
            .filter { $0.activationState == .foregroundActive }
            .first(where: { $0 is UIWindowScene })
            .flatMap({ $0 as? UIWindowScene })?.windows
            .first(where: \.isKeyWindow)
    }
}
if #available(iOS 15.4, *) {
    Button {
        guard let sharingController = try? GroupActivitySharingController(GroupActivityDefinition()) else {
            return
        }
        UIApplication.shared.keyWindow?.rootViewController?.present(sharingController, animated: true)
    } label: {
        Label("Start a FaceTime call", systemImage: "video.badge.plus")
    }
}

SharePlayオプションのある共有シート

iOS 15.4以降で、アプリがSharePlayに対応しており、かつ共有シートが提示されている場合、常にSharePlayオプションが表示されます。

共有しているアイテムにSharePlayが含まれていない(例えば、アプリをダウンロードするためのリンクを共有している)場合は、除外アイテムに.sharePlayオプションを追加することができます。

let shareSheet = UIActivityViewController(activityItems: [URL(string: "https://apple.com")!], applicationActivities: nil)
shareSheet.excludedActivityTypes = [.sharePlay]
UIApplication.shared.keyWindow?.rootViewController?.present(shareSheet, animated: true)

SharePlayに関するその他の知識

グループセッションを終了する、またはグループセッションから退出する

グループセッションから退出したいが、他のFaceTime参加者とのセッションをアクティブなままにしたい場合は、leave()機能を利用できます。

groupSession?.leave()

参加者が全員のアクティビティを終了したい場合は、end()機能を使用します。

groupSession?.end()

体験がフォアグラウンドになければならないことをシステムに通知する

アクティビティを続行するには、アプリがフォアグラウンドにある必要があることをシステムに伝えることができます。

groupSession.requestForegroundPresentation()

UIメッセージを提示する

一部のイベントタイプに基づいてUIを提示するようシステムに要求することができます。メッセージは参加者の連絡先アバターとともに表示されます。

システムが提供するいくつかのオプション(GroupSessionEvent.Action)のみご利用頂けます。種類はこちらからご確認頂けます。
https://developer.apple.com/documentation/groupactivities/groupsessionevent/action-swift.struct

groupSession?.showNotice(.init(originator: originator, action: .play, url: nil))
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2