ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Screen Time APIの最新情報
プライバシーを第一に考えながら、デバイスとの接続を管理できるAppを構築する方法をご覧ください。Screen Time APIを通して、機能制限やデバイスのアクティビティレポートなどの機能を使用して優れたエクスペリエンスを生み出す方法や、デバイスの所有者、親デバイス、デバイス管理者の重要な制御を紹介します。
リソース
-
ダウンロード
こんにちは MaryAshley Etefiaです Screen Timeの ソフトウェアエンジニアです COVID-19はデジタルヘルスケアと 生産性のリソースで 我々の業界に多大な圧力を かけました 社会のバランスの ニーズを強化し 誰もが自分のスペースを 上手く管理する能力が 試されました 昨年 Screen Time APIを 紹介し 子供たちの デバイスとの関わりを 管理できるAppの作成の 手助けになりました みなさんはこれを 創造的かつ生産的に 使用してくれました 異なった考えを促す文化が 採用され 私たちも光栄です また みなさんからの ご意見にも感謝しています iOS 16のScreenTime APIの 新機能をご紹介する前に iOS 15版の特徴を 振り返りたいと思います 昨年3つのフレームワークを 紹介しました Family ControlsとManaged SettingsとDevice Activityです iOS 15ではこれらの フレームワークによって ペアレントコントロールAppに 新機能が追加されました それらを見てみましょう Family Controlsは ゲートウェイとして Screen Time APIへの アクセスを許可します ペアレントコントロールAppの 削除を防ぎ AppやWebサイトを識別する Opaqueトークンで ユーザープライバシーを 守ることができます Managed Settingsでは機能制限や Webトラフィックのフィルタリング アクティビティの遮断などが 可能になり ブランディングや機能に合わせて Appをカスタマイズできました Device Activityフレームワークは 時間枠で開始と終了時間に応じて または Appやサイトが 設定値を超えた時に コードの実行を 可能にしました iOS 16ではそれぞれ アップデートがあります これらはAPIを 使いやすくするだけでなく ユーザー体験も向上します デモAppであるWorklogで ご説明しましょう Worklogは使用指標が 満たされるまで Appの使用を制限して 良い習慣を促すAppです このiPhoneの所有者Aniyahが Screen Time APIで 自分自身に制限を 設定する方法をお見せします まずFamily Controlsです iOS 15では iCloud認証で 子供のデバイスの承認が できるだけでした iOS 16では個々のユーザーを それぞれのデバイスで 承認することができます つまりScreen Time APIで ペアレントコンロトール以上の 機能を持つAppを構築できる ということです 既存のペアレントコントロールの 認証と違い デバイスごとのApp数に制限なく 個別認証が可能です 個々のの認証はペアレントコントロールの ユースケースには入らないので iCloudサインアウトや 削除の制限はありません それでは見てみましょう まず最初にFamilyControlsの 承認許可が必要です shared AuthorizationCenter を使って Worklogの起動時に リクエストを出します リクエストは ステータスの更新か エラーとして返されます 初めてiPhoneでこのAppを 使用するので requestAuthorizationは Aniyahの承認を求めます Allowを押すと FaceIDかTouchID もしくはパスコードでの 認証が必要になります 一度認証されると requestAuthorizationによる 再度のアラートはなく 影で認証されます Family Controlsで 承認されると AppのSettingsに ボタンが2つ追加されます Screen TimeのApps with Screen Time Accessと AppのSettingsのScreen Time Restrictions下です これらのスイッチで Family Controlsから Appの承認を 取り消すことができます ご覧のように 新しい個別認証は ペアレントコントロールの 認証と同様にシンプルで 非同期とすることで 両方が さらに改善されました 次はManaged Settingsです Managed Settingsは 使用が簡単になりました 特にManaged Settings Storeの使用です Managed Settings Storeは ユーザーおよびびデバイスに 設定値を適用する データストアです iOS 15では処理1つにつき ストア1つでした またAppとDevice Activity Extensionsには 別々のManaged Settings Storeが 必要でした これが原因でデバイスアクティビティでの 設定変更が困難でした iOS 16では最大50のManaged Settings Store作成でき それぞれに名前が付けられます またこれらの名前付きのストアは 自動的に AppとExtension間で 共有されます また名前付きのストアの設定を 一度にまとめて削除できます Worklogがどう名前付きのストア を使うか見てみましょう Worklogが初めて起動され Aniyahのデバイスが 認証されたら Gaming Managed Settings Storeを作成します これにはゲームの 機能制限が含まれ Worklogの場合だと すべての ゲームサイトの遮断です WorklogにはSocialと いう名のStoreもあり Appが初めて起動すると ソーシャルAppやWebなどを遮断します しかしWorklogでAniyahが Allow for Evenings ボタンを押すと Device Activity Schedule を作成し 午後5時から8時の間のみ ソーシャルメディアが許されます 午後5時になると Device Activity Monitorが 対応するストアの制限を解き 午後8時になると再び Aniyahのデバイスで ソーシャルメディアへの制限が 適応されます Gamingストアで ゲームサイトの制限が あったのでは?と思うかもしれません Socialストアと Gameストアの設定が 衝突するのでは? と思うでしょう 答えはノーです 厳しい設定が優先されるため Aniyahのデバイスでは ゲームサイトが まだ制限されます これらの名前付きストアは 非常にパワフルで Managed Settingsを活用した 開発がよりシンプルになります でも まだまだです Device Activityフレームワークに さらなる機能を追加しました iOS 15でDevice Activityは 開始と終了時間枠に加え Appとサイトの使用量にも 反応できました iOS 16ではSwiftUIを使い カスタムな使用状況レポートを 作成できる新しいReporting Serviceを用意しました 使用データは新しい エクステンションポイントに提供され ユーザーに対してどのデータを表示するか カスタマイズできます これにより ユーザー体験を完全に カスタマイズ できるだけでなく 完全なプライバシーも 提供できます WorklogではDeviceActivity Report.Contextと DeviceActivityFilterを 設定しました DeviceActivity Report.Contextは DeviceActivity Data に基づき どのようなタイプを描くか カスタマイズできます DeviceActivityFilterで 時間枠を 特定することもできます そしてDeviceActivity ReportSceneで コンテキストを定義し 何を表現するのか指示します PieChartView.Configuration とSwiftUIビューが コンテンツで定義されます makeConfigurationで Device Activity Dataを 円グラフにするため mapが行われます 新しいデータが 呼び込まれれば makeConfigurationは 自動的に発動します ここではPieChart View.Configurationが Aniyahの Device Activity Dataで 円グラフを作成するよう 設定されています 最後にDeviceActivity Report Extensionで定義し カスタムSwiftUIレポートを レンダーできます ここで作成した円グラフは デバイスアクティビティレポートを カスタマイズできる一例です Screen Time APIの 新機能は以上です Screen Time APIは 重要な機能制限や デバイスアクティビティの モニタリングなどの機能を プライバシーを守りながら サポートし続けています おさらいです Family Controlsで 個々のユーザーはデバイスごとに いくつものサードパーティAppを 承認できます Managed Settings Storesは AppとExtension間で 設定を共有し App内でいくつもの 名前付きのストアを 管理できるようになり Device Activityではプライバシーを保護 しながら 使用データを提示し カスタマイズ可能なUIが 加わりました これらの新機能により より多くのユーザーが みなさんのAppを 最大限に活用できるでしょう これらの新機能の実現は デジタルヘルスケアに対する みなさんの貢献のおかげです Screen Time APIを 素晴らしい方法で 活用してください みなさんのご意見と共に この技術をさらに 利用しやすくする努力を 続けてまいります ありがとうございました
-
-
3:12 - Request aAhuthorization
// APP: Request Authorization import SwiftUI import FamilyControls @main struct Worklog: App { let center = AuthorizationCenter.shared var body: some Scene { WindowGroup { VStack {…} .onAppear { Task { do { try await center.requestAuthorization(for: .individual) } catch { print("Failed to enroll Aniyah with error: \(error)") } } } } }
-
5:13 - Managed settings store
// MONITOR EXTENSION: Handle Social category at start/end of interval import DeviceActivity import ManagedSettings class WorklogMonitor: DeviceActivityMonitor { let database = BarkDatabase() override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) let socialStore = ManagedSettingsStore(named: .social) socialStore.clearAllSettings() } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) let socialStore = ManagedSettingsStore(named: .social) let socialCategory = database.socialCategoryToken socialStore.shield.applicationCategories = .specific([socialCategory]) socialStore.shield.webDomainCategories = .specific([socialCategory]) } }
-
7:02 - Device activity report and filter
// APP: Top-level view import SwiftUI import DeviceActivity extension DeviceActivityReport.Context { static let pieChart = Self(“Pie Chart") } @main struct Worklog: App { private let thisWeek = DateInterval(...) @State private var context: DeviceActivityReport.Context = .pieChart @State private var filter = DeviceActivityFilter(segment: .daily(during: thisWeek)) var body: some Scene { WindowGroup { GeometryReader { geometry in VStack(alignment: .leading) { DeviceActivityReport(context: context, filter: filter) .frame(height: geometry.size.height * 0.75) } }
-
7:24 - Device activity report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartReport: DeviceActivityReportScene { let context: DeviceActivityReport.Context = .pieChart let content: (PieChartView.Configuration) -> PieChartView func makeConfiguration(representing data: [DeviceActivityData]) -> PieChartView.Configuration { var totalUsageByCategory: [ActivityCategory:TimeInterval] totalUsageByCategory = data.map(…) return PieChartView.Configuration(totalUsageByCategory: totalUsageByCategory) } }
-
7:55 - Configure Custom Device Activity Report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartView: View { struct Configuration { let totalUsageByCategory: [ActivityCategory:TimeInterval] } let configuration: Configuration var body: some View { // A complex view that renders a bar graph based on Aniyah’s usage per category. PieChart(usage: configuration.totalUsageByCategory) } }
-
8:05 - Present custom report
// REPORT EXTENSION: Draw Custom Device Activity Report import SwiftUI import DeviceActivity @main struct WorklogReportExtension: DeviceActivityReportExtension { var body: some DeviceActivityReportScene { PieChartReport { configuration in PieChartView(configuration: configuration) } } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。