Búsqueda con NSUserActivity en Xamarin.iOS

NSUserActivity se introdujo en iOS 8 y se usa para proporcionar los datos de Handoff. Permite crear actividades en partes específicas de la aplicación que luego se pueden pasar a otra instancia de la aplicación que se ejecuta en un dispositivo iOS diferente. Después, el dispositivo receptor puede continuar con la actividad iniciada en el dispositivo anterior y recoger a la derecha donde se dejó el usuario. Para más información sobre el uso de Handoff, vea la documentación Introducción a Handoff.

Nuevo en iOS 9, NSUserActivity se puede indexar (tanto pública como privadamente) y buscar desde Spotlight Search y Safari. Al marcar como que NSUserActivity se puede buscar y agregar metadatos indexables, la actividad se puede mostrar en los resultados de búsqueda en el dispositivo iOS.

The App History overview

Si el usuario selecciona un resultado de búsqueda que pertenece a una actividad de la aplicación, la aplicación se iniciará y la actividad descrita por NSUserActivity se reiniciará y se presentará al usuario.

Las siguientes propiedades de NSUserActivity se usan para admitir App Search:

  • EligibleForHandoff – Si truees , esta actividad se puede usar en una operación de entrega.
  • EligibleForSearch : si truees , esta actividad se agregará al índice en el dispositivo y se presentará en los resultados de la búsqueda.
  • EligibleForPublicIndexing – Si truees , esta actividad se agregará al índice basado en la nube de Apple y se presentará a los usuarios (a través de la búsqueda) que aún no han instalado la aplicación en su dispositivo iOS. Consulte la sección Indexación de búsqueda pública a continuación para obtener más información.
  • Title : proporciona un título para la actividad y se muestra en los resultados de la búsqueda. Los usuarios también pueden buscar el texto del título en sí.
  • Keywords : es una matriz de cadenas usadas para describir la actividad que el usuario final indexará y realizará búsquedas.
  • ContentAttributeSet : se CSSearchableItemAttributeSet usa para describir aún más la actividad en detalle y proporcionar contenido enriquecido en los resultados de la búsqueda.
  • ExpirationDate – Si desea que una actividad solo se muestre hasta una fecha determinada, puede proporcionar esa fecha aquí.
  • WebpageURL – Si la actividad se puede ver en la web o si la aplicación admite vínculos profundos de Safari, puedes establecer el vínculo para visitarlo aquí.

Inicio rápido de NSUserActivity

Siga estas instrucciones para implementar una NSUserActivity búsqueda en la aplicación:

Hay algunas ventajas adicionales para NSUserActivity usar para hacer que el contenido se pueda buscar.

Creación de identificadores de tipo de actividad

Para poder crear una actividad de búsqueda, deberá crear un identificador de tipo de actividad para identificarlo. El identificador de tipo de actividad es una cadena corta agregada a la NSUserActivityTypes matriz del archivo Info.plist de la aplicación que se usa para identificar de forma única un tipo de actividad de usuario determinado. Habrá una entrada en la matriz para cada actividad que la aplicación admita y exponga a La búsqueda de aplicaciones.

Apple sugiere usar una notación de estilo DNS inverso para el identificador de tipo de actividad para evitar colisiones. Por ejemplo: com.company-name.appname.activity para actividades específicas basadas en aplicaciones o com.company-name.activity para actividades que se pueden ejecutar en varias aplicaciones.

El identificador de tipo de actividad se usa al crear una NSUserActivity instancia para identificar el tipo de actividad. Cuando una actividad continúa como resultado de que el usuario pulsa un resultado de búsqueda, el tipo de actividad (junto con el identificador de equipo de la aplicación) determina qué aplicación se iniciará para continuar con la actividad.

Para crear los identificadores de tipo de actividad necesarios para admitir este comportamiento, edite el archivo Info.plist y cambie a la vista Origen . Agregue una NSUserActivityTypes clave y cree identificadores en el formato siguiente:

The NSUserActivityTypes key and required identifiers in the plist editor

En el ejemplo anterior, creamos un nuevo identificador de tipo de actividad para la actividad de búsqueda (com.xamarin.platform). Al crear sus propias aplicaciones, reemplace el contenido de la NSUserActivityTypes matriz por los identificadores de tipo de actividad específicos de las actividades que admite la aplicación.

Creación de una actividad

A continuación se muestra un ejemplo de creación de una actividad para una búsqueda hospedada en el índice del dispositivo:

// 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();

Podríamos agregar más detalles estableciendo la ContentAttributeSet propiedad de la NSUserActivity siguiente manera:

Addition Search Details overview

Mediante el uso de , ContentAttributeSet puede crear resultados de búsqueda enriquecidos que insticen al usuario final para interactuar con ellos.

Responder a una actividad

Para responder al usuario que pulsa en un resultado de búsqueda (NSUserActivity) para nuestra aplicación, edite el archivo AppDelegate.cs e invalide el ContinueUserActivity método . Por ejemplo:

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

Tenga en cuenta que se trata de la misma invalidación de método que se usa para responder a las solicitudes handoff. Ahora, si el usuario hace clic en un vínculo de nuestra aplicación en los resultados de la búsqueda de Spotlight, la aplicación se mostrará en primer plano (o se iniciará si aún no se está ejecutando) y se mostrará el contenido, la navegación o la característica representada por ese vínculo:

Restore Previous State from Search

Indexación de búsqueda pública

Como hemos visto anteriormente, iOS 9 facilita el acceso de búsqueda al contenido de la aplicación y las características que el usuario ya ha detectado y usado en un dispositivo iOS determinado. Con la indexación pública, iOS 9 proporciona una manera para los usuarios que aún no han descubierto contenido o características (o que aún no han instalado la aplicación) para obtener esos resultados en sus búsquedas también.

La indexación pública funciona de la siguiente manera:

  1. Al crear una actividad para la aplicación, puede marcarla como pública.
  2. Las actividades públicas se envían a Apple e indexan en la nube.
  3. A medida que más usuarios interactúan con la aplicación en un dispositivo y usan la característica o el contenido específicos representados por la actividad, aumenta el rango.
  4. Los resultados públicos populares estarán disponibles para otros usuarios, incluso si no tienen instalada la aplicación.
  5. Estos resultados públicos se mostrarán en Spotlight Search y Safari (si la actividad incluye una dirección URL).

Podemos tomar la actividad de búsqueda privada que creamos anteriormente y expandirla para que sea pública:

// 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();

Solo porque se ha establecido una actividad para la indexación pública estableciendo EligibleForPublicIndexing = true, no significa que se agregará automáticamente al índice de la nube pública de Apple. Las siguientes condiciones deben cumplirse primero:

  1. Debe aparecer en los resultados de la búsqueda y seleccionarlos muchos usuarios. Los resultados permanecen privados hasta que se cumpla un umbral de interacción de actividad.
  2. El aprovisionamiento de aplicaciones impide que los datos específicos del usuario se indexan y hagan públicos.

Ventajas adicionales

Al adoptar La búsqueda de aplicaciones a través NSUserActivity de en la aplicación, también obtendrá las siguientes características:

  • Entrega: dado que La búsqueda de aplicaciones expone contenido, navegación o características con el mismo mecanismo que Handoff (NSUserActivity), puedes permitir fácilmente a los usuarios de la aplicación iniciar una actividad en un dispositivo y continuar con él en otro.
  • Sugerencias de Siri: junto con las sugerencias estándar que las sugerencias de Siri normalmente hacen, los activos de la aplicación se pueden sugerir automáticamente.
  • Avisos inteligentes de Siri: los usuarios podrán pedir a Siri que les recuerden las actividades de la aplicación.