iOS 11의 SiriKit 업데이트

SiriKit은 iOS 10에서 도입되었으며, 다양한 서비스(운동, 승차 예약 및 전화 걸기 포함)를 기본. SiriKit 개념 및 앱에서 SiriKit을 구현하는 방법은 SiriKit 섹션을 참조하세요.

Siri task list demo

iOS 11의 SiriKit은 다음과 같은 새롭고 업데이트된 의도를 추가합니다기본.

  • 목록 및 메모 – 새로 만들기! 작업 및 메모를 처리하는 앱에 대한 API를 제공합니다.
  • Visual Codes – New! Siri는 QR 코드를 표시하여 연락처 정보를 공유하거나 결제 거래에 참여할 수 있습니다.
  • 결제 – 결제 상호 작용에 대한 검색 및 전송 의도가 추가되었습니다.
  • 승차 예약 – 취소 라이드 및 피드백 의도가 추가되었습니다.

기타 새로운 기능은 다음과 같습니다.

  • 대체 앱 이름 – 고객이 Siri에게 대체 이름/발음을 제공하여 앱을 대상으로 지정하도록 지시하는 데 도움이 되는 별칭을 제공합니다.
  • 운동 시작 – 백그라운드에서 운동을 시작할 수 있는 기능을 제공합니다.

이러한 기능 중 일부는 아래에 설명되어 있습니다. 다른 항목에 대한 자세한 내용은 Apple의 SiriKit 설명서를 참조 하세요.

목록 및 메모

새 목록 및 메모는 기본 Siri 음성 요청을 통해 작업 및 노트를 처리하는 앱용 API를 제공합니다.

작업

  • 제목과 완료 상태.
  • 필요에 따라 마감일과 위치를 포함합니다.

참고

  • 제목과 콘텐츠 필드가 있습니다.

작업과 메모는 모두 그룹으로 구성할 수 있습니다. 이 섹션의 나머지 부분에서는 TasksNotes SiriKit 예제를 사용하여 SiriKit에서 이 새 작업을 구현하는 방법을 설명합니다기본.

SiriKit 요청을 처리하는 방법

다음 단계에 따라 SiriKit 요청을 처리합니다.

  1. 해결 – 매개 변수의 유효성을 검사하고 사용자에게 추가 정보를 요청합니다(필요한 경우).
  2. 확인 – 요청을 처리할 수 있는 최종 유효성 검사 및 확인
  3. 핸들 – 작업(데이터 업데이트 또는 네트워크 작업 수행)을 수행합니다.

처음 두 단계는 선택 사항이며(권장됨) 마지막 단계가 필요합니다. SiriKit 섹션에는 자세한 지침이 있습니다.

메서드 확인 및 확인

이러한 선택적 메서드를 사용하면 코드에서 유효성 검사를 수행하거나, 기본값을 선택하거나, 사용자에게 추가 정보를 요청할 수 있습니다.

예를 들어 인터페이스의 IINCreateTaskListIntent 경우 필수 메서드는 .입니다 HandleCreateTaskList. Siri 상호 작용에 대한 더 많은 제어를 제공하는 네 가지 선택적 메서드가 있습니다.

  • ResolveTitle – 타이틀의 유효성을 검사하거나, 기본 제목(해당하는 경우)을 설정하거나, 데이터가 필요하지 않다는 신호를 표시합니다.
  • ResolveTaskTitles – 사용자가 말한 작업 목록의 유효성을 검사합니다.
  • ResolveGroupName – 그룹 이름의 유효성을 검사하거나, 기본 그룹을 선택하거나, 데이터가 필요하지 않다는 신호를 표시합니다.
  • ConfirmCreateTaskList – 코드가 요청된 작업을 수행할 수 있지만 수행하지 않는지 확인합니다(메서드만 Handle* 데이터를 수정해야 합니다).

의도 처리

목록에는 6개의 의도와 메모가 있으며기본 작업에는 3개, 메모에는 3개가 있습니다. 이러한 의도를 처리하기 위해 구현해야 하는 메서드는 다음과 같습니다.

  • 작업의 경우:
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • 참고:
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

각 메서드에는 특정 의도 유형이 전달되며, 여기에는 Siri가 사용자의 요청에서 구문 분석한 모든 정보(및 Confirm* 메서드에서 Resolve* 업데이트될 수 있음)가 포함됩니다. 앱은 제공된 데이터를 구문 분석한 다음, 데이터를 저장하거나 처리하기 위해 몇 가지 작업을 수행하고 Siri가 말하고 사용자에게 표시하는 결과를 반환해야 합니다.

응답 코드

필수 Handle* 및 선택적 Confirm* 메서드는 완료 처리기에 전달하는 개체의 값을 설정하여 응답 코드를 나타냅니다. 응답은 INCreateTaskListIntentResponseCode 열거형에서 제공됩니다.

  • Ready – 확인 단계 중에 반환됩니다(예: 메서드에서 Confirm* 반환되지만 메서드에서는 Handle* 반환되지 않음).
  • InProgress – 장기 실행 작업(예: 네트워크/서버 작업)에 사용됩니다.
  • Success – 성공한 작업의 세부 정보로 응답합니다(메서드에서 Handle* 만).
  • Failure – 오류가 발생하여 작업을 완료할 수 없음을 의미합니다.
  • RequiringAppLaunch – 의도에 따라 처리할 수 없지만 앱에서 작업을 수행할 수 있습니다.
  • Unspecified – 사용하지 마세요. 오류 메시지가 사용자에게 표시됩니다.

Apple의 SiriKit 목록 및 노트 설명서에서 이러한 방법 및 응답에 대해 자세히 알아보세요.

목록 및 메모 구현

TasksNotes SiriKit 예제다음 단계를 사용하여 빈 iOS 앱에 SiriKit 지원을 추가하기 위해 만들어졌습니다.

먼저 SiriKit 지원을 추가하려면 iOS 앱에 대해 다음 단계를 수행합니다.

  1. Entitlements.plist에서 SiriKit를 선택합니다.
  2. 개인 정보 – Siri 사용 설명 키를 Info.plist추가하고 고객을 위한 메시지를 추가합니다.
  3. 앱에서 INPreferences.RequestSiriAuthorization 메서드를 호출하여 사용자에게 Siri 상호 작용을 허용하라는 메시지를 표시합니다.
  4. 개발자 포털의 앱 ID에 SiriKit를 추가하고 새 자격을 포함하도록 프로비저닝 프로필을 다시 만듭니다.

그런 다음, Siri 요청을 처리하는 새 확장 프로젝트를 앱에 추가합니다.

  1. 솔루션을 마우스 오른쪽 단추로 클릭하고 새 프로젝트 추가>...를 선택합니다.
  2. iOS > 확장 의도 확장 > 템플릿을 선택합니다.
  3. 의도 및 IntentUI라는 두 개의 새 프로젝트가 추가됩니다. UI 사용자 지정은 선택 사항이므로 샘플에는 의도 프로젝트에 코드만 포함됩니다.

확장 프로젝트는 모든 SiriKit 요청이 처리되는 위치입니다. 별도의 확장으로 기본 앱과 자동으로 통신할 수 있는 방법이 없습니다. 일반적으로 앱 그룹을 사용하여 공유 파일 스토리지를 구현하여 해결됩니다.

IntentHandler 구성

클래스는 IntentHandler Siri 요청에 대한 진입점입니다. 모든 의도는 요청을 처리할 GetHandler 수 있는 개체를 반환하는 메서드에 전달됩니다.

아래 코드는 간단한 구현을 보여줍니다.

[Register("IntentHandler")]
public partial class IntentHandler : INExtension, IINNotebookDomainHandling
{
  protected IntentHandler(IntPtr handle) : base(handle)
  {}
  public override NSObject GetHandler(INIntent intent)
  {
    // This is the default implementation.  If you want different objects to handle different intents,
    // you can override this and return the handler you want for that particular intent.
    return this;
  }
  // add intent handlers here!
}

클래스는 상속 INExtension되어야 하며 샘플이 목록 및 노트 의도를 처리하므로 구현합니다 IINNotebookDomainHandling.

참고 항목

  • .NET에는 iOS SDK에서 프로토콜을 바인딩할 때 Xamarin이 준수하는 대 I문자로 접두사를 지정하는 인터페이스에 대한 규칙이 있습니다.
  • Xamarin은 iOS의 형식 이름도 유지하며 Apple은 형식 이름의 처음 두 문자를 사용하여 형식이 속한 프레임워크를 반영합니다.
  • 프레임워크의 Intents 경우 형식 앞에 접두사 IN* (예: INExtension)가 있지만 인터페이스는 아닙니다 .
  • 또한 프로토콜(C#의 인터페이스가 됨)은 두 I개의 s(예: )로 IINAddTasksIntentHandling끝납니다.

의도 처리

각 의도(작업 추가, 작업 특성 설정 등)는 아래 표시된 것과 유사한 단일 메서드로 구현됩니다. 메서드는 세 가지 기본 함수를 수행해야 합니다.

  1. 의도 처리 – Siri에서 구문 분석한 데이터는 의도 유형과 intent 관련된 개체에서 사용할 수 있습니다. 앱에서 선택적 Resolve* 메서드를 사용하여 해당 데이터의 유효성을 검사했을 수 있습니다.
  2. 데이터 저장소 유효성 검사 및 업데이트 – 데이터 시스템(기본 iOS 앱이 액세스할 수 있도록 앱 그룹 사용) 또는 네트워크 요청을 통해 데이터를 저장합니다.
  3. 응답 제공 – 처리기를 completion 사용하여 Siri에 응답을 다시 보내 사용자에게 읽기/표시합니다.
public void HandleCreateTaskList(INCreateTaskListIntent intent, Action<INCreateTaskListIntentResponse> completion)
{
  var list = TaskList.FromIntent(intent);
  // TODO: have to create the list and tasks... in your app data store
  var response = new INCreateTaskListIntentResponse(INCreateTaskListIntentResponseCode.Success, null)
  {
    CreatedTaskList = list
  };
  completion(response);
}

null 응답에 두 번째 매개 변수로 전달됩니다. 이는 사용자 활동 매개 변수이며 제공되지 않으면 기본값이 사용됩니다. iOS 앱이 Info.plist의 키를 통해 NSUserActivityTypes 지원하는 한 사용자 지정 활동 유형을 설정할 수 있습니다. 그런 다음 앱이 열릴 때 이 사례를 처리하고 특정 작업(예: 관련 보기 컨트롤러에 열고 Siri 작업에서 데이터 로드)을 수행할 수 있습니다.

이 예제에서는 결과를 하드 코딩 Success 하지만 실제 시나리오에서는 적절한 오류 보고를 추가해야 합니다.

테스트 구

다음 테스트 구는 샘플 앱에서 작동해야 합니다.

  • "TasksNotes에서 사과, 바나나, 배로 식료품 목록 만들기"
  • "TasksNotes에서 작업 WWDC 추가"
  • "TasksNotes의 학습 목록에 작업 WWDC 추가"
  • "TasksNotes에서 WWDC 참석을 완료로 표시"
  • "TasksNotes에서 집에 도착하면 아이폰을 구입하라는 알림"
  • "Buy i전화 TasksNotes에서 완료된 것으로 표시"
  • "TasksNotes에서 오전 8시에 집을 떠나라는 알림"

Create a new list exampleSet task as complete example

참고 항목

iOS 11 시뮬레이터는 이전 버전과 달리 Siri로 테스트를 지원합니다.

실제 디바이스에서 테스트하는 경우 SiriKit 지원을 위해 앱 ID 및 프로비저닝 프로필을 구성하는 것을 잊지 마세요.

대체 이름

이 새로운 iOS 11 기능은 사용자가 Siri를 사용하여 올바르게 트리거할 수 있도록 앱의 대체 이름을 구성할 수 있음을 의미합니다. iOS 앱 프로젝트의 Info.plist 파일에 다음 키를 추가합니다.

Info.plist showing alternative app name keys and values

대체 앱 이름을 설정하면 샘플 앱(실제로 TasksNotes라는 이름 )에도 다음 구가 작동합니다.

  • "MonkeyNotes에서 사과, 바나나, 배로 식료품 목록 만들기"
  • "MonkeyTodo에서 작업 WWDC 추가"

문제 해결

샘플을 실행하거나 사용자 고유의 애플리케이션에 SiriKit을 추가하는 동안 발생할 수 있는 몇 가지 오류:

NSInternalInconsistencyException

Objective-C 예외가 throw되었습니다. 이름: NSInternalInconsistencyException 이유: INPreferences 클래스 <사용: 앱에서 0x60400082ff00> 자격 com.apple.developer.siri가 필요합니다. Xcode 프로젝트에서 Siri 기능을 사용하도록 설정했나요?

  • Entitlements.plist에서 SiriKit이 선택됩니다.

  • Entitlements.plist는 프로젝트 옵션 > 빌드 > iOS 번들 서명에서 구성됩니다.

    Project options showing Entitlements correctly set

  • (디바이스 배포용) 앱 ID에 SiriKit이 활성화되고 프로비저닝 프로필이 다운로드되었습니다.