共用方式為


在 Xamarin.iOS 中使用 NSUserActivity 搜尋

NSUserActivity 已在 iOS 8 中引進,用來提供 Handoff 的數據。 它可讓您在應用程式的特定部分建立活動,然後傳遞至在不同 iOS 裝置上執行之應用程式的另一個實例。 接著,接收裝置可以繼續在上一個裝置上啟動的活動,並在用戶離開的位置右接。 如需使用 Handoff 的詳細資訊,請參閱 我們的 Handoff 簡介檔。

iOS 9 NSUserActivity 的新功能,可以編製索引(公開和私下),並從焦點搜尋和 Safari 搜尋。 藉由將標示 NSUserActivity 為可搜尋和新增可編製索引的元數據,活動就可以列在iOS裝置上的搜尋結果中。

應用程式歷程記錄概觀

如果使用者從您的應用程式選取屬於活動的搜尋結果,將會啟動應用程式,且 所 NSUserActivity 描述的活動將會重新啟動並向用戶顯示。

的下列屬性 NSUserActivity 可用來支援應用程式搜尋:

  • EligibleForHandoff – 如果 true為 ,此活動可用於「交接」作業。
  • EligibleForSearch – 如果 true為 ,此活動將會新增至裝置上的索引,並在搜尋結果中顯示。
  • EligibleForPublicIndexing – 如果 true為 ,此活動將會新增至 Apple 的雲端式索引,並向使用者呈現(透過搜尋)尚未在其 iOS 裝置上安裝您的應用程式。 如需詳細資訊,請參閱下方的 公用搜尋索引一 節。
  • Title – 提供活動的標題,並顯示在搜尋結果中。 使用者也可以搜尋標題本身的文字。
  • Keywords – 這是字串陣列,用來描述您的活動,將由用戶編制索引並可供搜尋。
  • ContentAttributeSet – 這是 CSSearchableItemAttributeSet 用來進一步詳細描述您的活動,並在搜尋結果中提供豐富的內容。
  • ExpirationDate – 如果您想要活動只顯示指定的日期,您可以在這裡提供該日期。
  • WebpageURL – 如果活動可以在 Web 上檢視,或如果您的應用程式支援 Safari 的深層連結,您可以設定連結以造訪這裡。

NSUserActivity 快速入門

請遵循下列指示,在您的應用程式中實作可 NSUserActivity 搜尋:

使用 NSUserActivity 讓內容可供搜尋時,還有一些額外的優點

建立活動類型標識碼

您必須先建立活動類型標識碼來識別它,才能建立搜尋活動。 活動類型標識碼是新增至NSUserActivityTypes應用程式 Info.plist 檔案陣列的簡短字串,用來唯一識別指定的用戶活動類型。 應用程式支援並公開給應用程式搜尋的每個活動,陣列中將會有一個專案。

Apple 建議使用活動類型標識碼的反向 DNS 樣式表示法,以避免衝突。 例如: com.company-name.appname.activity 針對特定應用程式型活動,或 com.company-name.activity 可跨多個應用程式執行的活動。

建立 NSUserActivity 實例以識別活動類型時,會使用活動類型識別碼。 當使用者點選搜尋結果而繼續活動時,活動類型(以及應用程式的小組標識元)會決定要啟動哪個應用程式以繼續活動。

若要建立必要的活動類型標識碼以支援此行為,請編輯 Info.plist 檔案並切換至 [來源 ] 檢視。 NSUserActivityTypes新增金鑰,並以下列格式建立識別碼:

plist 編輯器中的 NSUserActivityTypes 索引鍵和必要標識碼

在上述範例中,我們為搜尋活動建立了一個新的活動類型標識碼 (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();

我們可以藉由設定 ContentAttributeSetNSUserActivity 屬性來新增進一步的詳細數據,如下所示:

新增搜尋詳細數據概觀

藉由使用 , 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;
}

請注意,這是用來回應 Handoff 要求的相同方法覆寫。 現在,如果使用者在焦點搜尋結果中按下應用程式的連結,我們的應用程式將會帶到前景(如果尚未執行,則已啟動),且會顯示該連結所代表的內容、流覽或功能:

從搜尋還原先前的狀態

公用搜尋索引編製

如上所述,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. 應用程式布建可防止任何使用者特定的數據編製索引並公開。

其他優點

透過在您的應用程式中採用應用程式搜尋 NSUserActivity ,您也會取得下列功能:

  • 交接 - 由於應用程式搜尋會使用與 Handoff 相同的機制公開內容、流覽和/或功能,NSUserActivity因此您可以輕鬆地讓 app 的使用者在一部裝置上啟動活動,並在另一個裝置上繼續活動。
  • Siri 建議 - 以及 Siri 建議 通常提出的標準建議,可以自動建議來自您應用程式的使用中專案。
  • Siri 智慧提醒 - 使用者將能夠要求 Siri 提醒他們來自您的應用程式的活動。