サーチ…


前書き

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];

この後、上記のアクティビティはハンドオフに使用可能になるはずです(ただし、ハンドオフを適切に処理するためにはもっと多くの作業が必要です)。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow