共用方式為


Xamarin.iOS 中的主動式建議簡介

本文說明如何在 Xamarin.iOS 應用程式中使用主動式建議來推動參與,方法是讓系統主動向用戶呈現有用的資訊。

iOS 10 的新功能:主動式建議會透過主動將實用資訊自動呈現給使用者,以向使用者呈現與 Xamarin.iOS 應用程式互動的新聞方式。

iOS 10 藉由允許系統在適當時間自動向使用者呈現實用資訊,向應用程式呈現新的參與方式。 就像 iOS 9 提供使用焦點、交接和 Siri 建議將深度搜尋新增至應用程式的功能一樣,iOS 10 應用程式可以使用 iOS 10 來公開系統可從下列位置向使用者呈現的功能:

  • 應用程式切換器
  • 鎖定畫面
  • CarPlay
  • 地圖
  • Siri 互動
  • QuickType 建議

應用程式會使用 、Web 標記、Core Spotlight、MapKit、媒體播放器 和 UIKit 等NSUserActivity技術集合,向系統公開這項功能。 此外,藉由為應用程式提供主動式建議支援,可免費取得更深入的 Siri 整合。

以位置為基礎的建議

iOS 10 的新功能類別 NSUserActivity 包含 MapItem 屬性,可讓開發人員提供可在其他內容中使用的位置資訊。 例如,如果應用程式顯示餐廳評論,開發人員可以將 屬性設定 MapItem 為使用者在應用程式中檢視之餐廳的位置。 如果使用者切換至 地圖 應用程式,則餐廳的位置會自動提供。

如果應用程式支援應用程式搜尋,則可以使用 類別的新位址元件 CSSearchableItemAttributesSet 來指定使用者可能想要流覽的位置。 藉由設定 MapItem 屬性,其他屬性會自動填入。

除了設定 LatitudeLongitude 位址元件屬性之外,建議應用程式也提供 NamedLocationPhoneNumbers 屬性,因此 Siri 可以起始對位置的呼叫。

Web 標記型建議

iOS 9 已新增至在網站中包含結構化數據標記的功能,以豐富使用者在焦點和 Safari 搜尋結果中看到的內容(請參閱 使用 Web 標記搜尋)。 iOS 10 新增了包含位置標記的功能(例如由 Schema.org 所定義的 PostalAddress),以進一步增強用戶體驗。 例如,如果使用者在網站上檢視標示的位置頁面,系統可以在開啟 地圖 時建議相同的位置。

以文字為基礎的建議

UIKit 已在 iOS 10 中展開,以包含 UITextInputTraits 類別的 TextContentType 屬性,以指定文字區域中內容的語意意義。 有了這項資訊,系統通常可以自動選取適當的鍵盤類型,改善自動更正建議,並主動整合來自其他應用程式和網站的資訊。

例如,如果使用者在標示 UITextContentType.FullStreetAddress的文字欄位中輸入文字,則系統可以建議以使用者最近檢視的位置自動填入字段。

媒體型建議

如果應用程式使用 MPPlayableContentManager API 播放媒體,iOS 10 可讓使用者透過鎖定畫面上的應用程式檢視專輯藝術並播放媒體。

關係型 Siri 提醒

允許使用者使用 Siri 快速提醒,以在稍後的應用程式中檢視他們目前在應用程式中檢視的內容。 例如,如果他們在應用程式中觀看餐廳評論,他們可以叫用 Siri,並說 「當我回家時提醒我這件事」。 Siri 會產生提醒,其中包含應用程式中檢閱的連結。

聯繫人型建議

允許應用程式的連絡人(和聯繫人相關信息)出現在 iOS裝置上的連絡人應用程式中,以及儲存在系統中的所有用戶連絡人。

車程共用型建議

如果拼車應用程式使用 MKDirectionsRequest API,iOS 10 會在使用者可能想要乘坐時,將它顯示為應用程式切換器中的選項。 應用程式也必須在其檔案中指定 MKDirectionsModeRideShare MKDirectionsApplicationSupportedModes 密鑰的 ,以註冊為騎手共用Info.plist應用程式。

如果應用程式僅支援車程共用,系統建議會從「取得車程...」開始,如果支援其他類型的路線路線方向(例如步行或自行車),系統將會使用「取得方向...」。

重要

應用程式收到的 MKMapItem 物件可能不會包含經度和緯度資訊,而且需要地理編碼。

實作主動式建議

將主動式建議支援新增至 Xamarin.iOS 應用程式通常和實作幾個 API 一樣簡單,或擴充應用程式可能已經實作的幾個 API。

主動式建議會以三種主要方式與應用程式搭配使用:

  • NSUserActivity 和 Schema.org - NSUserActivity 可協助系統了解使用者目前在螢幕上使用的資訊。 Schema.org 會將類似的功能新增至網頁。
  • 位置建議 - 如果應用程式提供或取用以位置為基礎的信息,這些 API 延伸模組會提供新的方式,跨應用程式共用此資訊。
  • 媒體應用程式建議 - 系統可以根據使用者與 iOS 裝置互動的內容,升級應用程式及其媒體內容。

並且藉由實作下列專案,在應用程式中受到支援:

  • iOS 8 中新增了 Handoff 以支援 Handoff - NSUserActivity ,可讓開發人員在一部裝置上啟動活動,然後在另一個裝置上繼續活動(請參閱 Handoff 簡介)。
  • 焦點搜尋 - iOS 9 新增了從 NSUserActivity 焦點搜尋結果中升級應用程式內容的功能(請參閱 使用核心焦點進行搜尋)。
  • 關係型 Siri 提醒 - 在 iOS 10 中, NSUserActivity 已擴充為允許 Siri 快速提出提醒,以檢視使用者目前在應用程式檢視的內容,稍後再進行檢視。
  • 位置建議 - iOS 10 增強 NSUserActivity 功能,以擷取應用程式內檢視的位置,並在整個系統的許多位置推廣這些位置。
  • 內容相關 Siri 要求 - NSUserActivity 會提供內容給 Siri 應用程式內呈現的資訊,讓使用者可以從應用程式內取得指示或撥打通話。
  • 聯繫人互動 - iOS 10 的新功能, NSUserActivity 允許通訊應用程式從聯繫人卡片(在聯繫人應用程式中)升級為替代通訊方法。

所有這些功能都有一個共同點,它們全都以一種形式或另一種形式使用 NSUserActivity 來提供其功能。

NSUserActivity

如上所述, NSUserActivity 協助系統了解使用者目前在螢幕上使用的資訊。 NSUserActivity 是輕量狀態快取機制,可擷取使用者在瀏覽應用程式時的活動。 例如,查看餐廳應用程式:

NSUserActivity 輕量狀態快取機制

使用下列互動:

  1. 當使用者與應用程式搭配使用時, NSUserActivity 會建立 ,以稍後重新建立應用程式的狀態。
  2. 如果使用者搜尋餐廳,則會遵循相同的建立活動模式。
  3. 同樣地,當用戶檢視結果時。 在此最後一個案例中,使用者正在檢視位置,而且在iOS 10中,系統會更瞭解某些概念(例如位置或通訊互動)。

仔細看看最後一個畫面:

NSUserActivity 詳細數據

在這裡,應用程式正在建立 NSUserActivity ,並已填入資訊,以便稍後重新建立狀態。 應用程式也包含一些元數據,例如位置的名稱和位址。 建立此活動之後,應用程式可讓iOS知道它代表使用者的目前狀態。

然後,應用程式會決定活動是否會透過無線方式公告 Handoff,並儲存為位置建議的暫存值,或新增至裝置上的焦點索引,以在搜尋結果中顯示。

如需遞交和焦點搜尋的詳細資訊,請參閱我們的 遞交 簡介和 iOS 9新的搜尋API 指南。

建立活動

建立活動之前,必須建立活動類型標識元才能識別它。 活動類型標識碼是新增至 NSUserActivityTypes 應用程式 Info.plist 檔案數位的簡短字串,用來唯一識別指定的用戶活動類型。 應用程式支援並公開給應用程式搜尋的每個活動,陣列中將會有一個專案。 如需詳細資訊,請參閱建立 活動類型標識元參考

檢視活動的範例:

// Create App 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;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Inform system of Activity
activity.BecomeCurrent();

新的活動是使用活動類型標識碼來建立。 接下來,會建立定義活動的一些元數據,以便稍後還原此狀態。 然後,活動會獲得有意義的標題,並附加至用戶資訊。 最後,會啟用某些功能,並將活動傳送至系統。

上述程式代碼可以進一步增強,藉由進行下列變更,以包含提供活動內容的元數據:

...

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Inform system of Activity
activity.BecomeCurrent();

如果開發人員的網站能夠顯示與應用程式相同的資訊,應用程式可以包含URL,而且內容可以顯示在未安裝應用程式的其他裝置上(透過Handoff):

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

還原活動

若要回應使用者點選應用程式的搜尋結果 (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;
}

開發人員必須確定這與上面建立的活動類型標識碼 (com.xamarin.platform) 相同。 應用程式會使用 儲存在 中 NSUserActivity 的資訊,將狀態還原回用戶離開的位置。

建立活動的優點

在上述程式代碼數量最少的情況下,應用程式現在能夠利用三個新的 iOS 10 功能:

  • Handoff
  • 焦點搜尋
  • 關係型 Siri 提醒

下一節將探討如何啟用另外兩個新的 iOS 10 功能:

  • 位置建議
  • 關係型 Siri 要求

以位置為基礎的建議

以上述餐廳搜尋應用程式的範例為例。 如果已實 NSUserActivity 作並正確填入所有元資料和屬性,使用者就能夠執行下列動作:

  1. 在應用程式中尋找想要與朋友見面的餐館。
  2. 當使用者使用多任務應用程式切換器離開應用程式時,系統會自動顯示建議(在畫面底部),以使用他們慣用的瀏覽應用程式來取得餐廳的指示。
  3. 如果使用者切換至訊息應用程式並開始輸入 「讓我們見面」,QuickType 鍵盤會自動建議貼上餐廳的位址。
  4. 如果使用者切換到 地圖 應用程式,餐廳的位址會自動建議為目的地。
  5. 這甚至適用於第三方應用程式(支援 NSUserActivity),因此使用者也可以切換至拼車應用程式,並自動建議餐廳位址作為目的地。
  6. 它也提供 Siri 的內容,讓使用者可以在餐廳應用程式內叫用 Siri,並詢問 「取得指示...」 ,Siri 會提供使用者正在檢視之餐廳的指示。

上述所有功能都有一個共同點,它們都表示建議原本來自何處。 在上述範例中,它是虛構的餐館評論應用程式。

iOS 10 已增強,可透過數個小修改和現有架構的新增功能,為應用程式啟用此功能:

  • NSUserActivity 有其他欄位可用來擷取應用程式內檢視的位置資訊。
  • MapKit 和 CoreSpotlight 已新增數項以擷取位置。
  • 位置感知功能已新增至 Siri、地圖、鍵盤、多任務處理和其他系統中的應用程式。

若要實作以位置為基礎的建議,請從上述相同的活動程序代碼開始:

// Create App 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;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

// Inform system of Activity
activity.BecomeCurrent();

如果應用程式使用 MapKit,就如同將目前的對應 MKMapItem 新增至活動一樣簡單:

// Save MKMapItem location
activity.MapItem = myMapItem;

如果應用程式未使用 MapKit,它可以採用應用程式搜尋,並為位置指定下列新屬性:

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...

attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

請詳細查看上述程序代碼。 首先,每個實例都需要位置的名稱:

attributes.NamedLocation = "Apple Inc.";

然後,文字型實例需要以文字為基礎的文字描述(例如 QuickType 鍵盤):

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

緯度和經度是選擇性的,但請確定使用者已路由傳送至應用程式想要傳送至的確切位置,因此應該包含:

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

藉由設定電話號碼,應用程式可以取得 Siri 的存取權,讓使用者可以從應用程式叫用 Siri, 方法是說出類似「撥打這個地方」

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

最後,應用程式可以指出實例是否適合流覽和通話:

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

實作聯繫人互動

iOS 10 的新功能,通訊應用程式會從聯繫人卡片深入整合至聯繫人應用程式。 對於已實作聯繫人互動的應用程式,用戶可以將指定的應用程式資訊新增至聯繫人中的特定人員。 例如,如果他們點擊卡片頂端的快速動作按鈕來傳送訊息,附加的應用程式將會列為傳送訊息的選項。

如果已選取第三方應用程式,則可以記住並呈現為使用者下次想要連絡使用者時訊息給指定人員的預設方式。

聯繫人互動是在應用程式中實作,並使用 NSUserActivity iOS 10中引進的新意圖架構。 如需使用意圖的詳細資訊,請參閱我們的 瞭解 SiriKit 概念實作 SiriKit 指南。

捐贈互動

看看應用程式如何捐贈互動:

捐贈互動概觀

應用程式會建立物件 INInteraction ,其中包含 意圖INIntent)、 參與者元數據意圖代表用戶動作,例如進行視訊通話或傳送簡訊。 參與者包括接收通訊的人員。 元數據會定義新增資訊,例如成功傳送訊息等等。

開發人員絕不會直接建立 或INIntentResponseINIntent實例,他們會使用其中一個特定子類別(根據應用程式代表使用者完成的工作),這些子類別繼承自這些父類別。 例如, INSendMessageIntentINSendMessageIntentResponse 用於傳送簡訊。

完成互動之後,請呼叫 DonateInteraction 方法來通知系統可以使用互動。

當使用者從聯繫人卡片與應用程式互動時,互動會與 NSUserActivity配套,然後用來啟動應用程式:

互動會與用來啟動應用程式的 NSUserActivity 搭配使用

請查看下列傳送訊息意圖範例:

using System;
using Foundation;
using UIKit;
using Intents;

namespace MonkeyNotification
{
  public class DonateInteraction
  {
    #region Constructors
    public DonateInteraction ()
    {
    }
    #endregion

    #region Public Methods
    public void SendMessageIntent (string text, INPerson from, INPerson[] to)
    {

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

      // Define details
      var info = new NSMutableDictionary ();
      info.Add (new NSString ("message"), new NSString (text));

      // Populate Activity
      activity.Title = "Sent MonkeyChat Message";
      activity.UserInfo = info;

      // Enable capabilities
      activity.EligibleForSearch = true;
      activity.EligibleForHandoff = true;
      activity.EligibleForPublicIndexing = true;

      // Inform system of Activity
      activity.BecomeCurrent ();

      // Create message Intent
      var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

      // Create Intent Reaction
      var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

      // Create interaction
      var interaction = new INInteraction (intent, response);

      // Donate interaction to the system
      interaction.DonateInteraction ((err) => {
        // Handle donation error
        ...
      });
    }
    #endregion
  }
}

詳細查看此程式代碼,它會建立並填入 的實例 NSUserActivity (如上一節的 建立活動 一節所示)。 接下來,它會建立的實例 INSendMessageIntent (繼承自 INIntent),並填入要傳送之訊息的詳細數據:

var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

INSendMessageIntentResponse建立並傳遞上述建立的 NSUserActivity

var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

INInteraction是從剛建立的傳送訊息意圖 (INSendMessageIntent) 和回應 (INSendMessageIntentResponse) 建置的:

var interaction = new INInteraction (intent, response);

最後,系統會通知互動:

// Donate interaction to the system
interaction.DonateInteraction ((err) => {
  // Handle donation error
  ...
});

完成處理程式會傳入其中,應用程式可以響應捐贈成功或失敗。

活動最佳做法

使用活動時,Apple 會建議下列最佳做法:

  • 用於 NeedsSave 延遲承載更新。
  • 請務必保留目前活動的強式參考。
  • 只傳輸包含足夠資訊以還原狀態的小型承載。
  • 請確定活動類型識別碼是唯一且描述性的,方法是使用反向 DNS 表示法來指定它們。

Schema.org

如上所示, NSUserActivity 協助系統了解使用者目前在螢幕上使用的資訊。 Schema.org 會將類似的功能新增至網頁。

Schema.org 可以為網站提供相同類型的位置型互動。 Apple 設計了新的位置建議,以在 Safari 中檢視時運作,就像在原生應用程式中一樣。

部分 Schema.org 背景:

  • 它提供開放式 Web 標記詞彙標準。
  • 其運作方式是在網頁上包含結構化元數據。
  • 有超過 500 個架構代表各種可用概念。
  • 透過在網站上實作,開發人員可以取得在原生應用程式中使用 NSUserActivity 的某些優點。

架構會排列在結構之類的樹狀結構中,其中特定類型,例如 Restaurant,繼承自更多泛型類型,例如 本地業務。 如需詳細資訊,請參閱 Schema.org

例如,如果網頁包含下列數據:

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "telephone":"(415) 781-1111",
  "url":"https://www.yanksing.com",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"101 Spear St",
    "addressLocality":"San Francisco",
    "postalCode":"94105",
    "addressRegion":"CA"
  },
  "aggregateRating":{
    "@type":"AggregateRating",
    "ratingValue":"3.5",
    "reviewCount":"2022"
  }
}
</script>

如果使用者在Safari中瀏覽此頁面,然後切換至另一個應用程式,則會擷取頁面的位置資訊,並作為系統其他部分的位置建議提供(如上述活動所示)。

Safari 會在遵守下列任何架構屬性的網頁上擷取任何內容:

  • PostalAddress
  • GeoCoordinates
  • 電話屬性。

如需詳細資訊,請參閱我們的 使用Web標記 搜尋指南。

取用位置建議

下一節將討論取用來自系統其他部分的位置建議(例如 地圖 應用程式)或其他第三方應用程式。

應用程式可以使用位置建議的兩種主要方式:

  • 透過QuickType鍵盤。
  • 直接取用路由應用程式中的位置資訊。

位置建議和 QuickType 鍵盤

如果應用程式以文字為基礎的格式處理位址,應用程式可以透過QuickType UI利用位置建議。iOS 10 會使用下列功能展開 QuickType UI:

  • 應用程式可以新增UI中文字欄位語意意圖的相關提示。
  • 應用程式可以在應用程式中取得主動式建議。
  • 應用程式可以受益於增強的自動更正。

iOS 10 中文字欄位控制項的新 TextContentType 屬性可讓開發人員定義使用者要在指定欄位中輸入之值的語意意圖。 例如:

var textField = new UITextField();
textField.TextContentType = UITextContentType.FullStreetAddress;

會告訴系統,應用程式預期使用者會在指定的欄位中輸入完整的街道位址。 這可讓QuickType鍵盤在使用者在此欄位中輸入值時,自動在鍵盤上提供位置建議。

以下是靜態類別中 UITextContentType 開發人員可使用的一些較常見的類型:

  • Name
  • GivenName
  • FamilyName
  • Location
  • FullStreetAddress
  • AddressCityAndState
  • TelephoneNumber
  • EmailAddress

路由應用程式和位置建議

本節將探討直接從路由應用程式內取用位置建議。 若要讓路由應用程式新增這項功能,開發人員會利用現有的 MKDirectionsRequest 架構,如下所示:

  • 在多任務處理中升級應用程式。
  • 將應用程式註冊為路由應用程式。
  • 使用 MapKit MKDirectionsRequest 物件處理啟動應用程式。
  • 根據用戶參與度,讓iOS能夠瞭解如何在適當時間向使用者建議應用程式。

當應用程式開始使用 MapKit MKDirectionsRequest 物件時,它應該會自動開始提供使用者指示給要求的位置,或呈現 UI,讓使用者輕鬆開始取得方向。 例如:

using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;

namespace MonkeyChat
{
  [Register ("AppDelegate")]
  public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
  {
    ...

    public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
    {
      if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
        var request = new MKDirectionsRequest (url);
        var coordinate = request.Destination?.Placemark.Location?.Coordinate;
        var address = request.Destination.Placemark.AddressDictionary;
        if (coordinate.IsValid()) {
          var geocoder = new CLGeocoder ();
          geocoder.GeocodeAddress (address, (place, err) => {
            // Handle the display of the address

          });
        }
      }

      return true;
    }
  }    
}

請詳細查看此程序代碼。 它會測試它是否為有效的目的地要求:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

如果是,則會從 URL 建立 MKDirectionsRequest

var request = new MKDirectionsRequest(url);

iOS 10 的新功能,應用程式可以傳送沒有地理座標的位址,這會導致開發人員需要編碼位址:

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
  // Handle the display of the address

});

媒體應用程式建議

如果應用程式處理任何類型的媒體,例如播客應用程式或串流媒體內容,例如音訊或視訊,使用iOS 10,它可以利用系統中的媒體建議。

針對處理媒體的應用程式,iOS 支援下列行為:

  • iOS 會根據使用者先前的行為升級使用者可能使用的應用程式。
  • 與應用程式相關的建議會顯示在焦點和今日檢視中。
  • 如果應用程式符合下列其中一個觸發程式,它可能會提升為鎖定畫面建議:
    • 插上耳機或 藍牙 裝置後,會連線。
    • 上車後。
    • 到達家或工作后。

藉由在 iOS 10 中包含簡單的 API 呼叫,開發人員可以為媒體應用程式的使用者建立更吸引人的鎖定畫面體驗。 藉由使用 類別 MPPlayableContentManager 來管理媒體播放,完整的媒體控制項(例如音樂應用程式所呈現的控制項)將會顯示在應用程式的鎖定畫面上。

using System;
using MediaPlayer;
using UIKit;

namespace MonkeyPlayer
{
  public class PlayableContentDelegate : MPPlayableContentDelegate
  {
    #region Constructors
    public PlayableContentDelegate ()
    {
    }
    #endregion

    #region Override methods
    public override void InitiatePlaybackOfContentItem (MPPlayableContentManager contentManager, Foundation.NSIndexPath indexPath, Action<Foundation.NSError> completionHandler)
    {
      // Access the media item to play
      var item = LoadMediaItem (indexPath);

      // Populate the lock screen
      PopulateNowPlayingItem (item);

      // Prep item to be played
      var status = PreparePlayback (item);

      // Call completion handler
      completionHandler (null);
    }
    #endregion

    #region Public Methods
    public MPMediaItem LoadMediaItem (Foundation.NSIndexPath indexPath)
    {
      var item = new MPMediaItem ();

      // Load item from media store
      ...

      return item;
    }

    public void PopulateNowPlayingItem (MPMediaItem item)
    {
      // Get Info Center and album art
      var infoCenter = MPNowPlayingInfoCenter.DefaultCenter;
      var albumArt = (item.Artwork == null) ? new MPMediaItemArtwork (UIImage.FromFile ("MissingAlbumArt.png")) : item.Artwork;

      // Populate Info Center
      infoCenter.NowPlaying.Title = item.Title;
      infoCenter.NowPlaying.Artist = item.Artist;
      infoCenter.NowPlaying.AlbumTitle = item.AlbumTitle;
      infoCenter.NowPlaying.PlaybackDuration = item.PlaybackDuration;
      infoCenter.NowPlaying.Artwork = albumArt;
    }

    public bool PreparePlayback (MPMediaItem item)
    {
      // Prepare media item for playback
      ...

      // Return results
      return true;
    }
    #endregion
  }
}

摘要

本文涵蓋主動式建議,並示範開發人員如何使用它們來將流量導向 Xamarin.iOS 應用程式。 其中涵蓋實作主動式建議並呈現使用指導方針的步驟。