Xamarin.iOS에서 NSUserActivity를 사용하여 검색

NSUserActivity 는 iOS 8에서 도입되었으며 핸드오프에 대한 데이터를 제공하는 데 사용됩니다. 이를 통해 앱의 특정 부분에서 활동을 만든 다음 다른 iOS 디바이스에서 실행되는 앱의 다른 인스턴스로 전달할 수 있습니다. 그러면 수신 디바이스는 이전 디바이스에서 시작된 활동을 계속하여 사용자가 중단한 위치를 바로 선택할 수 있습니다. 핸드오프 사용에 대한 자세한 내용은 핸드오프 소개 설명서를 참조하세요.

iOS 9의 새로운 기능으로, NSUserActivity 공개 및 비공개로 인덱싱하고 스포트라이트 검색 및 Safari에서 검색할 수 있습니다. 검색 가능한 것으로 표시 NSUserActivity 하고 인덱싱 가능한 메타데이터를 추가하면 iOS 디바이스의 검색 결과에 활동을 나열할 수 있습니다.

The App History overview

사용자가 앱에서 활동에 속하는 검색 결과를 선택하면 앱이 시작되고 해당 사용자가 설명한 NSUserActivity 활동이 다시 시작되어 사용자에게 표시됩니다.

다음 속성 NSUserActivity 은 App Search를 지원하는 데 사용됩니다.

  • EligibleForHandoff– 이 작업을 핸드오프 작업에서 사용할 수 있는 경우 true
  • EligibleForSearch – 이 true작업이 디바이스 내 인덱스로 추가되고 검색 결과에 표시됩니다.
  • EligibleForPublicIndexing – 이 true활동이 Apple의 클라우드 기반 인덱스에 추가되고 iOS 디바이스에 앱을 아직 설치하지 않은 사용자에게(검색을 통해) 표시됩니다. 자세한 내용은 아래의 공개 검색 인덱싱 섹션을 참조하세요.
  • Title – 활동에 대한 제목을 제공하고 검색 결과에 표시됩니다. 사용자는 타이틀 자체의 텍스트를 검색할 수도 있습니다.
  • Keywords – 최종 사용자가 인덱싱하고 검색할 수 있도록 작업을 설명하는 데 사용되는 문자열 배열입니다.
  • ContentAttributeSetCSSearchableItemAttributeSet– 활동을 자세히 설명하고 검색 결과에 풍부한 콘텐츠를 제공하는 데 사용됩니다.
  • ExpirationDate – 지정된 날짜까지만 활동을 표시하려면 여기에서 해당 날짜를 제공할 수 있습니다.
  • WebpageURL – 웹에서 활동을 볼 수 있거나 앱이 Safari의 딥 링크를 지원하는 경우 여기에 방문하도록 링크를 설정할 수 있습니다.

NSUserActivity 빠른 시작

다음 지침에 따라 앱에서 검색 가능 NSUserActivity 파일을 구현합니다.

콘텐츠를 검색할 수 있도록 하는 데 사용할 NSUserActivity 수 있는 몇 가지 추가 이점이 있습니다.

활동 유형 식별자 만들기

검색 활동을 만들려면 활동 유형 식별자를 만들어 식별해야 합니다. 활동 유형 식별자는 지정된 사용자 활동 유형을 고유하게 식별하는 데 사용되는 앱의 Info.plist 파일 배열에 추가 NSUserActivityTypes 된 짧은 문자열입니다. 앱이 App Search를 지원하고 노출하는 각 활동에 대해 배열에 하나의 항목이 있습니다.

Apple은 충돌을 방지하기 위해 활동 유형 식별자에 역방향 DNS 스타일 표기법을 사용할 것을 제안합니다. 예를 들어 com.company-name.appname.activity 특정 앱 기반 활동 또는 com.company-name.activity 여러 앱에서 실행할 수 있는 활동의 경우입니다.

활동 유형 식별자는 활동 유형을 식별하는 인스턴스를 NSUserActivity 만들 때 사용됩니다. 사용자가 검색 결과를 탭한 결과로 활동이 계속되면 활동 유형(앱의 팀 ID와 함께)은 활동을 계속하기 위해 시작할 앱을 결정합니다.

이 동작을 지원하는 데 필요한 활동 유형 식별자를 만들려면 Info.plist 파일을 편집하고 원본 보기로 전환합니다. NSUserActivityTypes 키를 추가하고 다음 형식으로 식별자를 만듭니다.

The NSUserActivityTypes key and required identifiers in the plist editor

위의 예제에서는 검색 작업(com.xamarin.platform)에 대한 새 활동 유형 식별자를 하나 만들었습니다. 고유한 앱을 만들 때 배열의 NSUserActivityTypes 내용을 앱이 지원하는 활동과 관련된 활동 유형 식별자로 바꿉니다.

활동 만들기

다음은 디바이스 내 인덱스 호스팅 검색에 대한 활동을 만드는 예제입니다.

// Create App Search Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Add App Search ability
activity.EligibleForSearch = true;
activity.BecomeCurrent();

다음과 같이 속성을 NSUserActivity 설정 ContentAttributeSet 하여 세부 정보를 추가할 수 있습니다.

Addition Search Details overview

이 기능을 ContentAttributeSet 사용하면 최종 사용자가 상호 작용하도록 유도하는 풍부한 검색 결과를 만들 수 있습니다.

활동에 응답

앱의 검색 결과(NSUserActivity)를 탭하는 사용자에게 응답하려면 AppDelegate.cs 파일을 편집하고 메서드를 재정의합니다ContinueUserActivity. 예시:

public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{

    // Take action based on the activity type
    switch (userActivity.ActivityType) {
    case "com.xamarin.platform":
        // Restore the state of the app here...
        break;
    }

    return true;
}

이는 핸드오프 요청에 응답하는 데 사용되는 것과 동일한 메서드 재정의입니다. 이제 사용자가 스포트라이트 검색 결과에서 앱에서 링크를 클릭하면 앱이 포그라운드(또는 아직 실행되지 않은 경우 시작됨)로 이동되고 해당 링크가 나타내는 콘텐츠, 탐색 또는 기능이 표시됩니다.

Restore Previous State from Search

공용 검색 인덱싱

위에서 본 것처럼 iOS 9를 사용하면 사용자가 지정된 iOS 디바이스에서 이미 검색하고 사용한 앱 콘텐츠 및 기능에 대한 검색 액세스를 쉽게 제공할 수 있습니다. 퍼블릭 인덱싱을 사용하면 iOS 9는 아직 콘텐츠 또는 기능을 검색하지 않은 사용자(또는 앱을 설치하지 않은 사용자)가 검색에서 이러한 결과를 얻을 수 있는 방법을 제공합니다.

공용 인덱싱은 다음과 같은 방식으로 작동합니다.

  1. 앱에 대한 활동을 만들 때 퍼블릭으로 표시할 수 있습니다.
  2. 퍼블릭 활동은 Apple로 전송되고 클라우드에서 인덱싱됩니다.
  3. 더 많은 사용자가 디바이스에서 앱과 상호 작용하고 활동이 나타내는 특정 기능 또는 콘텐츠를 사용함에 따라 순위가 상승합니다.
  4. 앱이 설치되어 있지 않더라도 다른 사용자가 인기 있는 공개 결과를 사용할 수 있습니다.
  5. 이러한 공개 결과는 스포트라이트 검색 및 Safari에 표시됩니다(활동에 URL이 포함된 경우).

위에서 만든 개인 검색 활동을 사용하여 공개로 확장할 수 있습니다.

// Create App Search Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Add App Search ability
activity.EligibleForSearch = true;
activity.EligibleForPublicIndexing = true;
activity.BecomeCurrent();

활동을 설정 EligibleForPublicIndexing = true하여 퍼블릭 인덱싱에 대해 설정했다고 해서 Apple의 퍼블릭 클라우드 인덱스로 자동으로 추가된다는 의미는 아닙니다. 먼저 다음 조건을 충족해야 합니다.

  1. 검색 결과에 표시되고 많은 사용자가 선택해야 합니다. 활동 참여 임계값이 충족될 때까지 결과는 비공개로 기본.
  2. 앱 프로비저닝은 사용자별 데이터가 인덱싱되고 공개되는 것을 방지합니다.

추가 혜택

앱에서 App Search NSUserActivity 를 채택하면 다음과 같은 기능도 얻을 수 있습니다.

  • 핸드오프 - 앱 검색에서 핸드오프(Handoff)NSUserActivity와 동일한 메커니즘을 사용하여 콘텐츠, 탐색 및/또는 기능을 노출하므로 앱 사용자가 한 장치에서 활동을 시작하고 다른 장치에서 작업을 계속하도록 쉽게 허용할 수 있습니다.
  • Siri 제안 - Siri 제안에서 일반적으로 제공하는 표준 제안과 함께 앱의 활성을 자동으로 제안할 수 있습니다.
  • Siri 스마트 미리 알림 - 사용자는 Siri에게 앱의 활동에 대해 상기시키도록 요청할 수 있습니다.