ハイライト
ResearchKit 2020 アップデートでは、インフォームド・コンセントの署名、HealthKit の許可リクエスト、アンケートのレビュー、3D モデルの表示、カスタマイズされたアクティブ タスクが同じ研究タスク プロセスのセットに統合されているため、開発者はより少ない自作インターフェイスでより正確な研究データを収集できます。
主要内容
医学研究アプリの最初のハードルは、多くの場合、アルゴリズムだけではなくプロセスです。参加者は研究の目的を理解し、インフォームドコンセントを完了し、健康データを承認し、アンケートに答え、いくつかの積極的なタスクを実行する必要があります。各ステップでは、解釈、入力、検証、結果の保存が必要です。以前は、開発者は承認、署名、レビュー、マルチメディア インタラクションを接続するために、ResearchKit の外部にカスタム インターフェイスを追加する必要がよくありました。
このセッションで示された変更は、これらのブレークポイントを ResearchKit のタスク フローに復元することです。ORKInstructionStepより豊富な説明コンテンツを掲載できるため、ORKWebViewStep署名は同じ HTML 同意ページの下で収集でき、新しい HealthKit 許可ステップにより研究プロセスに健康データの承認が導入され、アンケートには「わからない」オプション、文字数プロンプト、クリア ボタン、レビュー ページが追加されます。 (02:54)
後半では、アクティブなタスクの境界が拡張され続けます。リサーチアプリも利用可能ORK3DModelStepUSDZ または BioDigital の 3D 人体モデルを表示して、体の部位や病変を視覚的に説明します。開発者も使用できますORKActiveStep独自のフロント カメラ タスクの実装を開始し、ビデオ ファイルを収集し、再試行回数を記録して、結果を返します。ORKTaskViewController。(12:24)
ここでの ResearchKit は、研究プロセスの骨格として機能します。開発者は、何を調査するか、何をモデル化するか、結果をどのように処理するかを決定しますが、共通リンクごとに一連のインターフェイスを書き直す必要はありません。参加者は継続的なタスクを目の当たりにし、研究チームは構造化された結果を受け取りました。
詳細
オンボーディング: 説明ステップと Web 表示ステップを使用して、参加のしきい値を下げます。
(03:24) アプリのオンボーディング (参加プロセス) を調査するには、まず調査とは何かを明確に説明する必要があります。セッション用ORKInstructionStepタイトル、説明、画像を含むウェルカム ページを作成します。
let instructionStep = ORKInstructionStep(identifier: "InstructionStepIdentifier")
instructionStep.title = "Welcome!"
instructionStep.detailText = "Thank you for joining our study. Tap Next to learn more before signing up."
instructionStep.image = UIImage(named: "health_blocks")!
キーポイント:
ORKInstructionStepは、コンテンツを記述するために使用される ResearchKit のステップです。 -identifierこのステップに安定したアイデンティティを与えると、その後の結果とプロセスはそれに依存します。 -titleそしてdetailText現在のステップの目的を説明する責任があります。 -image研究の説明を単なる文章の段落以上のものにしましょう。研究テーマの写真や案内写真を入れるのに適しています。
(04:08) 同じ命令ステップを追加することもできますORKBodyItem。 SF Symbols のハート型アイコンを使用して、事前のインフォームド・コンセントの指示をスキャンしやすい項目に分割するデモンストレーションを行います。
let informedConsentInstructionStep = ORKInstructionStep(identifier: "ConsentStepIdentifier")
informedConsentInstructionStep.title = "Before You Join"
informedConsentInstructionStep.image = UIImage(named: "informed_consent")!
let heartBodyItem = ORKBodyItem(text: exampleText,
detailText: nil,
image: UIImage(systemName: "heart.fill"),
learnMoreItem: nil,
bodyItemStyle: .image)
informedConsentInstructionStep.bodyItems = [heartBodyItem]
キーポイント:
ORKBodyItem説明コンテンツ、アイコン、スタイルの一部を再利用可能なプロジェクトにカプセル化します。 -UIImage(systemName:)ここで SF シンボルを直接使用できることに注意してください。 -bodyItemStyle: .imageアイコンを画像として表示します。 -bodyItemsこれは、リスク、リターン、データ使用量を複数の命令に分割するのに適した配列です。
(05:04) インフォームド・コンセントの署名も組み込まれていますORKWebViewStep。同意書の表示と署名の収集には、以前は 2 つのステップが必要でした。 HTML コンテンツの下に署名領域を表示するプロパティを設定できるようになりました。
let webViewStep = ORKWebViewStep(identifier: String(describing: Identifier.webViewStep), html: exampleHtml)
webViewStep.showSignatureAfterContent = true
キーポイント:
ORKWebViewStep同意フォームまたはドキュメントを HTML 形式で表示する責任を負います。 -htmlパラメータは表示されるコンテンツに渡されます。 -showSignatureAfterContent = trueコンテンツの後に署名ビューが表示されます。- 参加者は文書を読んで 1 ページに署名するため、プロセスが短縮され、カスタム インターフェイスが 1 つ減ります。
(05:25) HealthKit の承認もオンボーディングに含まれます。トランスクリプトでは、新しいリクエスト許可ステップについて明示的に言及しています: 開発者は書きたいコンテンツを渡しますHKSampleTypeコレクションして読みたいHKObjectTypeコレクション、創作ORKHealthKitPermissionType、そしてそれを置きますORKHealthKitPermissionStep。このようにして、医療データの認証を ResearchKit プロセスとは別に実装する必要はありません。
HealthKit permission flow in ResearchKit
1. Create a set of HKSampleTypes for data the app wants write access to.
2. Create a set of HKObjectTypes for data the app wants read access to.
3. Create ORKHealthKitPermissionType with those two sets.
4. Create ORKHealthKitPermissionStep with the permission type array.
キーポイント:
HKSampleType書き込み許可に対応しており、収集した健康サンプルを保存する研究アプリに適しています。 -HKObjectType読み取り権限に対応しており、既存の健康データを研究コンテキストとして読み込むのに適しています。 -ORKHealthKitPermissionType読み取りタイプと書き込みタイプを組み合わせます。 -ORKHealthKitPermissionStepシステム認証リクエストを ResearchKit タスク フローに追加します。
アンケート: 無効な回答を減らし、参加者が確認できるようにします
(07:43) アンケートセクションを新たに追加ORKSESAnswerFormat。段階的なスケール表示に適しており、参加者は自分の状態に近い「最適な健康状態」と「悪い健康状態」を選択できます。
let sesAnswerFormat = ORKSESAnswerFormat(topRungText: "Optimal Health",
bottomRungText: "Poor Health")
let sesFormItem = ORKFormItem(identifier: "sesIdentifier",
text: exampleText,
answerFormat: sesAnswerFormat)
キーポイント:
ORKSESAnswerFormatラダースケールの問題を担当します。 -topRungTextそしてbottomRungTextスケールの両端のセマンティクスを定義します。 -ORKFormItem質問のテキストと回答の書式をフォームに結合します。- これらの質問は、主観的な健康状態、生活の質、または自己評価スケールに適しています。
(08:47) スケールの質問には、新しい「わからない」ボタンもあります。研究の現場では、参加者に不確実な質問への回答を強制すると、ノイズが発生する可能性があります。shouldShowDontKnowButtonそしてcustomDontKnowButtonText参加者に、答えられないことを明確にしてもらいます。
let scaleAnswerFormat = ORKScaleAnswerFormat(maximumValue: 10, minimumValue: 1, defaultValue: 11, step: 1)
scaleAnswerFormat.shouldShowDontKnowButton = true
scaleAnswerFormat.customDontKnowButtonText = "Prefer not to answer"
let scaleAnswerFormItem = ORKFormItem(identifier: "ScaleAnswerFormItemIdentifier",
text: "What is your current pain level?",
answerFormat: scaleAnswerFormat)
キーポイント:
ORKScaleAnswerFormat痛みの強さのスケールを 1 から 10 まで定義します。 -shouldShowDontKnowButton = true「わからない」の項目を表示します。 -customDontKnowButtonTextデフォルトのコピーは置き換えることができるため、プライバシーに配慮した問題に適しています。 -ORKFormItemこの回答形式を特定の質問に結び付けます。
(09:47) フリーテキスト入力も更新されました。セッションでは、最大文字数のプロンプトとクリア ボタンについて言及しているため、参加者はさらにどのくらいの内容を入力できるかを知り、すぐにクリアして書き直すことができます。
let textAnswerFormat = ORKAnswerFormat.textAnswerFormat()
textAnswerFormat.multipleLines = true
textAnswerFormat.maximumLength = 280;
textAnswerFormat.hideWordCountLabel = false
textAnswerFormat.hideClearButton = false
キーポイント:
textAnswerFormat()テキスト回答形式を作成します。 -multipleLines = true長文の回答も可能です。 -maximumLength = 280入力長を制限します。 -hideWordCountLabel = false文字番号プロンプトを表示します。 -hideClearButton = falseクリアボタンを表示します。
(11:00) アンケートを送信する前に、ORKReviewViewController参加者がすべての質問と回答を確認し、編集を通じて回答を更新できるようにします。セッション氏は、これを「データの正確性の向上」という文脈で説明しています。つまり、人々は間違った情報を入力するでしょう、そしてシステムはそれをチェックする機会を与えるべきです。
let reviewVC = ORKReviewViewController(task: taskViewController.task,
result: taskViewController.result,
delegate: self)
reviewVC.reviewTitle = "Review your response"
reviewVC.text = "Please take a moment to review your responses below. If you need to change any answers just tap the edit button to update your response."
キーポイント:
taskViewController.taskオリジナルのタスク構造を提供します。 -taskViewController.resultこれまでに収集された回答を提供します。 -delegate: self結果の更新と未完了のセルの選択に関連するメソッドを実装する必要があります。 -reviewTitleそしてtextレビューページの目的を説明する責任があります。
アクティブなタスク: リスニングタスクから 3D モデルまで
(11:48) ResearchKit のヒアリング タスクの更新は、エクスペリエンスの詳細に偏っています。環境 SPL メーターには、バックグラウンド ノイズがしきい値内にあるかどうかを確認するための新しいアニメーションが追加されます。 dB HL トーン聴力測定ステップでは、ボタン、触覚フィードバック、進行状況表示が更新され、AirPods Pro キャリブレーション データのサポートが追加されます。ここには公式のコード スニペットはありません。核心は、リスニングテスト中の誤操作と不確実性を軽減することです。
Hearing task updates
- Environment SPL meter shows a clearer threshold animation.
- dB HL tone audiometry step updates button UI and haptics.
- Progress indicator changes to a label.
- Calibration data supports AirPods Pro.
キーポイント:
- SPL メーターのアニメーションは、参加者がテスト環境が適格であるかどうかを判断するのに役立ちます。
- ボタンと触覚フィードバックにより、テスト中の運用コストが削減されます。
- テキストによる進行状況は、抽象的な進行状況バーよりも理解しやすいです。
- AirPods Pro キャリブレーション データにより、このタイプのハードウェアを関連するリスニング タスクに使用できるようになります。
(14:30) 3D モデルは機能をさらに拡張します。リサーチキット新規ORK3DModelStepそしてORKUSDZModelManager。開発者は USDZ ファイルを Xcode プロジェクトに追加し、モデル マネージャーを作成して、それを表示のために 3D ステップに送信します。
let usdzModelManager = ORKUSDZModelManager(usdzFileName: "toy_drummer")
usdzModelManager.allowsSelection = false
usdzModelManager.highlightColor = .yellow
usdzModelManager.enableContinueAfterSelection = false
usdzModelManager.identifiersOfObjectsToHighlight = arrayOfIdentifiers
let threeDimensionalModelStep = ORK3DModelStep(identifier: drummerModelIdentifier,
modelManager: usdzModelManager)
キーポイント:
ORKUSDZModelManagerプロジェクト内の USDZ モデルを読み取ります。 -allowsSelectionユーザーがモデルパーツを選択できるかどうかを制御します。 -highlightColorハイライトカラーを設定します。 -enableContinueAfterSelection[続行] ボタンが選択動作に依存するかどうかを制御します。 -identifiersOfObjectsToHighlightモデル内の指定されたオブジェクトを事前にハイライト表示できます。 -ORK3DModelStepモデル マネージャーを ResearchKit タスク フローに接続します。
(15:31)ORK3DModelManagerは、Apple がコミュニティに明示的に継承することを望んでいる抽象親クラスです。 BioDigital が提供するものを紹介するセッションORKBioDigitalModelManager: モデルは Web 経由でロードされ、管理者または SDK で更新でき、ラベル、色、注釈を追加できます。デモンストレーションのシナリオには、ユーザーにマネキンの痛みのある部分を指摘してもらうことや、心臓モデルを使用して冠状動脈閉塞の位置を説明することが含まれます。
BioDigital model manager workflow
1. Import ResearchKit and BioDigital's HumanKit.
2. Create an ORKBioDigitalModelManager instance.
3. Set inherited properties such as highlight color and identifiers to highlight.
4. Use BioDigital-specific APIs to hide objects, load a model ID, and annotate an object.
5. Create ORK3DModelStep with that manager.
キーポイント:
ORK3DModelManager責任は、3D モデル エクスペリエンスを抽象化するために必要な共通の機能です。 -ORKBioDigitalModelManagerこれはコミュニティ拡張機能であり、Apple の組み込み USDZ マネージャーではありません。- Web ローディング モデルの利点は、コンテンツの更新に必ずしもアプリの新しいバージョンのリリースを必要としないことです。
- ラベルと注釈は、医学教育、痛みの位置特定、および検査結果の医師の解釈に適しています。
カスタムアクティブタスク: フロントカメラタスクの構造
(20:35) アクティブなタスクをカスタマイズするための基本パスは次のとおりです: アプリの作成ORKTaskに一連の手順を渡します。ORKTaskViewController表示、完了後にデリゲート経由で取得ORKTaskResult。セッションの例としては、フロント カメラ タスクが挙げられます。このタスクでは、ユーザーはリアルタイムでプレビュー、録画の開始、録画の停止、ビデオの確認、再試行を行うことができます。
ResearchKit task roundtrip
1. The app creates an ORKTask object.
2. ORKTaskViewController receives the task and presents each step.
3. Each active step collects its own result.
4. ORKTaskViewControllerDelegate returns ORKTaskResult to the app.
キーポイント:
ORKTask手順をまとめたものです。 -ORKTaskViewControllerステップの表示を担当し、アプリはそれを継承する必要はありません。 -ORKTaskResult各ステップの結果を要約します。- デリゲートは、ResearchKit を終了してビジネス コードに戻ります。
(21:51) フロントカメラタスクを実装する際、スピーカーはORKFrontFacingCameraStep、から継承ORKActiveStepに、最大録画時間、レビューを許可するかどうか、リトライを許可するかどうかの 3 つの設定項目を追加します。次に、このステップで独自のビュー コントローラー クラスを返します。
ORKFrontFacingCameraStep design
- subclass ORKActiveStep
- add maximumDuration
- add allowsReview
- add allowsRetry
- override stepViewControllerClass
- return ORKFrontFacingCameraStepViewController
キーポイント:
ORKActiveStepセンサー、タイミング、音声およびビデオの記録などのアクティブな収集が必要なタスクに適しています。- 構成アイテムは、タスクを組み立てるときにこのタスクの動作を決定しやすくするためにステップ上に配置されます。
-
stepViewControllerClassデータ モデルをプレゼンテーション ロジックに接続します。 - カスタムビューコントローラーの継承
ORKActiveStepViewController。
(23:23) インターフェイス層はカスタマイズを使用しますUIView。それは受け取りますAVCaptureSessionライブ プレビューを表示し、ボタン イベントをビュー コントローラーに返し、タイマーと録画後のオプションを提供します。ここで重要な点は、カメラ コードは引き続きアプリによって管理され、ResearchKit はアクティブなタスクの結果、プロセス、プレゼンテーション用のスロットを提供するということです。
Front-facing camera content view responsibilities
- receive AVCaptureSession
- set up an AVCaptureVideoPreviewLayer
- pass view events back through a block
- start a timer with the maximum duration
- show review and retry options before submission
キーポイント:
AVCaptureSessionまだAVFoundationからのものです。- コンテンツ ビューは、プレビュー、タイミング、およびインタラクション イベントのみを担当します。
- イベントはブロックを通じて返され、ビュー コントローラーが応答方法を決定します。
- レビューおよび再試行機能はステップ構成から提供され、インターフェイスには構成に従ってオプションが表示されます。
(24:46) 結果レイヤーの継承ORKFileResult。例ではORKFrontFacingCameraStepResultビデオファイルのURLを記録し、追加しますretryCount、ユーザーが削除して再入力した回数を記録するために使用されます。ビューコントローラーのオーバーライドresultカスタム結果を現在の結果コレクションに追加するメソッド。
Front-facing camera result
- subclass ORKFileResult
- store contentType
- store fileURL
- add retryCount
- append ORKFrontFacingCameraStepResult to the current results collection
キーポイント:
- ビデオは結果ファイルです。使用します
ORKFileResultデータ形式に近い。 -fileURLタスクの終了後にアプリに録音ファイルを見つけさせます。 -retryCountこれは研究における貴重な行動データであり、タスクの難しさやユーザーの躊躇を反映している可能性があります。 - カバレッジ
resultメソッドは、カスタム取得データを ResearchKit に戻すための鍵となります。
(25:49) 最後の Xcode デモでは、次の 3 つのステップがまとめられています。ORKInstructionStep、作成したばかりですORKFrontFacingCameraStep、終了するために使用される完了ステップ。それらを入れてくださいORKOrderedTask、その後、注入しますORKTaskViewControllerそして見せます。完了後、デリゲートはカスタム結果を読み取り、記録ファイルの URL と再試行回数を出力します。
Demo task composition
1. Create an instruction step.
2. Create ORKFrontFacingCameraStep.
3. Set the maximum recording limit to 15 seconds.
4. Allow review and retry.
5. Add a completion step.
6. Create ORKOrderedTask with all steps.
7. Present ORKTaskViewController.
8. Read ORKFrontFacingCameraStepResult in the delegate.
キーポイント:
ORKOrderedTask直線的なプロセスに適しています。- 15 秒の上限、レビューおよび再試行はすべて、前のステップで公開された構成です。
-
ORKTaskViewControllerDelegateこれは、完了、キャンセル、失敗を処理するための統合されたエントリ ポイントです。 - カスタム アクティブ タスクは、最終的には ResearchKit のタスク結果モデルに準拠しています。
重要ポイント
-
やるべきこと: 慢性疾患研究アプリへの完全な参加プロセスを作成します。 実行する価値がある理由:
ORKInstructionStep、ORKBodyItem、ORKWebViewStep署名表示では、指示、同意書、署名をオーバーレイできます。 開始方法: まず、指示ステップを使用して研究目的を書き留め、次に Web ビューステップを使用して HTML 同意フォームを表示し、showSignatureAfterContent開ける。 -
やるべきこと: 研究登録プロセスに健康データの承認を組み込みます。 実行する価値がある理由: 新しい HealthKit 権限ステップにより、承認のために ResearchKit を終了する必要がなくなり、必要なカスタム インターフェイスが少なくなります。 始め方:書きたいことを整理する
HKSampleTypeそして読まれることHKObjectType、作成するORKHealthKitPermissionType、そしてそれを置きますORKHealthKitPermissionStep。 -
対処法: レビュー ページと症状アンケートに「わからない」オプションを追加します。 実行する価値がある理由:
ORKDontKnowボタンは強制的な回答によって引き起こされるダーティなデータを削減し、ORKReviewViewController送信する前に参加者にエラーを修正してもらいます。 開始方法: スケール回答形式をオンにしますshouldShowDontKnowButton、アンケート完了後にタスクと結果で初期化されます。ORKReviewViewController。 -
やるべきこと: 人体の部位の選択または病気の教育タスクを実行します。 実行する価値がある理由:
ORK3DModelStepそしてORKUSDZModelManagerインタラクティブな 3D モデルを ResearchKit フローに配置する機能。痛みの場所、筋肉グループ、またはテスト結果の解釈に適しています。 開始方法: USDZ モデルを準備し、強調表示する必要があるオブジェクト識別子を配列に収集し、ORKUSDZModelManager後で引き渡されましたORK3DModelStep。 -
やるべきこと: ビデオ キャプチャ アクティブ タスクを構築します。 実行する価値がある理由: セッションはフロント カメラ タスクの完全な構造を示し、ビデオ ファイルと再試行回数の両方を ResearchKit の結果として返すことができます。 開始方法: 継承
ORKActiveStep構成、継承の定義ORKActiveStepViewController管理AVCaptureSession、使用ORKFileResult録画ファイルの URL を保存します。
関連セッション
- CareKit の新機能 - CareKit 2020 アップデートでは、研究データがケア プラン、SwiftUI タスク カード、および HealthKit/FHIR データ レイヤーにどのように入力されるかについて説明しています。
- HealthKit の新機能 - HealthKit には、ResearchKit 研究タスクの健康データ基盤として機能する新しい症状、ECG、および移動性データが追加されています。
- HealthKit と健康データを同期する — HealthKit データの同期、バージョン管理、およびアンカー クエリについて説明します。これは、アプリによる長期健康データのその後の処理に関する研究に適しています。
- HealthKit 入門 — HealthKit の承認、読み取り、書き込み、統計の基本。ResearchKit HealthKit の許可手順にアクセスする準備ができている開発者に適しています。
- 火傷を負わずに FHIR を処理する - FHIRModels は、研究、ケア、医療システムのデータを結び付ける臨床データ モデルと検証を導入します。
コメント
GitHub Issues · utterances