iOS
NSUserActivity
サーチ…
前書き
NSUserActivityオブジェクトを使用して、アプリ内の重要なイベントをシステムと調整することができます。これは、iOSとmacOSを実行する異なるデバイス間のハンドオフの基礎となります。また、公開インデックスの作成や機能強化、アプリのSpotlight検索結果の作成にも使用できます。 iOS 10以降、SiriKitを使用してアプリとSiriとのやりとりを調整することもできます。
備考
アクティビティタイプ
サポートされているアクティビティタイプは、アプリのInfo.plist
ファイルでNSUserActivityTypes
キーの下に定義する必要があります。アクティビティはデベロッパーチームIDに関連付けられています。つまり、同じチームIDを持つアプリ間でアクティビティの調整が制限されています(「Safari」が「Chrome」からのハンドオフアクティビティを受け入れることはできません。
現在の活動になる/辞める
becomeCurrent
を使用してアクティビティを現在のものとしてマークすると、HandoffまたはSpotlight Indexingで利用できるようになります。一度に1つのアクティビティだけが現在の状態になることがあります。 resignCurrent
を呼び出すことで、無効にすることなくアクティビティを非アクティブとしてマークすることができます。
アクティビティをinvalidate
すると、同じインスタンスが再び最新にならないことがあります。
SiriKitに提供する際に、活動を最新のものとしてマークしないでください。
検索インデックス
アクティビティは、アプリ内の汎用インデックス機構として使用することはできません 。代わりに、ユーザーが開始した操作に応答してのみ使用する必要があります。アプリ内のすべてのコンテンツにインデックスを付けるには、CoreSpotlightを使用します。
NSUserActivityの作成
NSUserActivity
オブジェクトを作成するには、 Info.plist
ファイルでサポートするアクティビティの種類を宣言する必要があります。サポートされているアクティビティはアプリケーションによって定義され、一意でなければなりません。アクティビティは、逆ドメインスタイルの命名規則(つまり、 "com.companyName.productName.activityName")を使用して定義されます。あなたのInfo.plistのエントリは次のようになります:
キー | 値 |
---|---|
NSUserActivityTypes | [アレイ] |
- item0 | com.companyName.productName.activityName01 |
- item1 | com.companyName.productName.activityName02 |
サポートされているすべてのアクティビティタイプを定義したら、アプリケーションのコードにアクセスして使用することができます。
NSUserActivity
オブジェクトを作成するには、以下を実行する必要があります
// Initialize the activity object and set its type from one of the ones specified in your app's plist
NSUserActivity *currentActivity = [[NSUserActivity alloc] initWithActivityType:@"com.companyName.productName.activityName01"];
// Set the title of the activity.
// This title may be displayed to the user, so make sure it is localized and human-readable
currentActivity.title = @"Current Activity";
// Configure additional properties like userInfo which will be included in the activity
currentActivity.userInfo = @{@"informationKey" : @"value"};
// Configure the activity so the system knows what may be done with it
// It is important that you only set YES to tasks that your application supports
// In this example, we will only enable the activity for use with Handoff
[currentActivity setEligibleForHandoff:YES];
[currentActivity setEligibleForSearch:NO]; // Defaults to NO
[currentActivity setEligibleForPublicIndexing:NO]; // Defaults to NO
// Set this activity as the current user activity
// Only one activity may be current at a time on a device. Calling this method invalidates any other current activities.
[currentActivity becomeCurrent];
この後、上記のアクティビティはハンドオフに使用可能になるはずです(ただし、ハンドオフを適切に処理するためにはもっと多くの作業が必要です)。