Compartir vía


Búsqueda con NSUserActivity en Xamarin.iOS

NSUserActivity se introdujo en iOS 8 y se usa para proporcionar los datos de Handoff. Le 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 desde el punto en que lo haya dejado el usuario. Para más información sobre el uso de Handoff, vea la documentación Introducción a Handoff.

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

Introducción al historial de aplicaciones

Si el usuario selecciona un resultado de la 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.

Se usan las siguientes propiedades de NSUserActivity para admitir App Search:

  • EligibleForHandoff: si es true, esta actividad se puede usar en una operación de Handoff.
  • EligibleForSearch: si es true, esta actividad se agregará al índice en el dispositivo y se presentará en los resultados de la búsqueda.
  • EligibleForPublicIndexing: si es true, esta actividad se agregará al índice basado en la nube de Apple y se presentará a los usuarios (mediante la búsqueda) que aún no han instalado la aplicación en su dispositivo iOS. Vea la sección Indexación de búsqueda pública siguiente para 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 permitirá buscar.
  • ContentAttributeSet: es una instancia de CSSearchableItemAttributeSet que se usa para describir aún más la actividad en detalle y proporcionar contenido enriquecido en los resultados de la búsqueda.
  • ExpirationDate: si quiere 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, puede establecer el vínculo para visitarla aquí.

Inicio rápido de NSUserActivity

Siga estas instrucciones para implementar una instancia de NSUserActivity que se pueda buscar en la aplicación:

Hay algunas ventajas adicionales del uso de NSUserActivity 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 identificarla. El identificador de tipo de actividad es una cadena corta agregada a la matriz NSUserActivityTypes 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 a fin de 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 instancia de NSUserActivity para identificar el tipo de actividad. Cuando una actividad continúa como resultado de que el usuario pulsa un resultado de la 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.

A fin de 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 clave NSUserActivityTypes y cree identificadores en el formato siguiente:

Clave NSUserActivityTypes e identificadores necesarios en el editor de plist

En el ejemplo anterior, se crea un identificador de tipo de actividad para la actividad de búsqueda (com.xamarin.platform). Al crear aplicaciones propias, reemplace el contenido de la matriz NSUserActivityTypes 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();

Se podrían agregar más detalles si se establece la propiedad ContentAttributeSet de NSUserActivity de la siguiente manera:

Introducción a los detalles de búsqueda adicionales

Al usar ContentAttributeSet, puede crear resultados de la búsqueda enriquecidos que animen al usuario final a interactuar con ellos.

Respuesta a una actividad

Para responder al usuario que pulsa en un resultado de la búsqueda (NSUserActivity) para la aplicación, edite el archivo AppDelegate.cs e invalide el método ContinueUserActivity. 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 de Handoff. Ahora, si el usuario hace clic en un vínculo de la aplicación en los resultados de la búsqueda de Spotlight, la aplicación se mostrará en primer plano (o se iniciará si todavía no está en ejecución) y se mostrará el contenido, la navegación o la característica representada por ese vínculo:

Restaurar el estado anterior desde la búsqueda

Indexación de búsqueda pública

Como ha visto antes, 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) también obtengan esos resultados en sus búsquedas.

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 y se 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 su clasificación.
  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).

Se puede tomar la actividad de búsqueda privada que se ha creado antes 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();

Pero el hecho de que una actividad se haya establecido para la indexación pública al establecer EligibleForPublicIndexing = true no significa que se agregue automáticamente al índice de la nube pública de Apple. Primero se deben cumplir las siguientes condiciones:

  1. Debe aparecer en los resultados de la búsqueda y la deben seleccionar 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 indexen y se hagan públicos.

Ventajas adicionales

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

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