iOS
NSUserActivity
Buscar..
Introducción
Se puede usar un objeto NSUserActivity para coordinar eventos significativos en una aplicación con el sistema. Es la base para el traspaso entre diferentes dispositivos que ejecutan iOS y macOS. Además, también se puede utilizar para mejorar la indexación pública y aumentar o crear resultados de búsqueda de Spotlight para una aplicación. A partir de iOS 10, también se puede usar para coordinar las interacciones entre su aplicación y Siri utilizando SiriKit.
Observaciones
Tipos de actividad
Los tipos de actividad admitidos deben definirse en el archivo Info.plist
su aplicación bajo la clave NSUserActivityTypes
. Las actividades están vinculadas a su ID de equipo de desarrollador, lo que significa que la coordinación de actividades está restringida entre aplicaciones que tienen la misma ID de equipo (por ejemplo, "Safari" no puede aceptar una actividad de transferencia desde "Chrome" o viceversa).
Convertirse / renunciar a la actividad actual
Al marcar una actividad como actual con el uso de becomeCurrent
está disponible para el traspaso o la indexación de Spotlight. Solo una actividad puede ser actual a la vez. Puede marcar una actividad como inactiva sin invalidar llamando a resignCurrent
.
Si invalidate
una actividad, es posible que la misma instancia no se vuelva actual.
No marque una actividad como actual cuando la proporcione para SiriKit .
Indexación de búsqueda
Las actividades no deben utilizarse como un mecanismo de indexación de propósito general dentro de su aplicación. En su lugar, solo deben usarse en respuesta a acciones iniciadas por el usuario. Para indexar todo el contenido de su aplicación, use CoreSpotlight.
Creando un NSUserActivity
Para crear un objeto NSUserActivity
, su aplicación debe declarar los tipos de actividades que admite en su archivo Info.plist
. Las actividades compatibles están definidas por su aplicación y deben ser únicas. Una actividad se define utilizando un esquema de nombres de estilo de dominio inverso (es decir, "com.companyName.productName.activityName"). Aquí es cómo podría verse una entrada en su Info.plist:
Llave | Valor |
---|---|
NSUserActivityTypes | [Formación] |
- item0 | com.companyName.productName.activityName01 |
- Objeto 1 | com.companyName.productName.activityName02 |
Una vez que haya definido todos los tipos de actividades compatibles, puede comenzar a acceder y usarlos en el código de su aplicación.
Para crear un objeto NSUserActivity
debe hacer lo siguiente
// Initialize the activity object and set its type from one of the ones specified in your app's plist
NSUserActivity *currentActivity = [[NSUserActivity alloc] initWithActivityType:@"com.companyName.productName.activityName01"];
// Set the title of the activity.
// This title may be displayed to the user, so make sure it is localized and human-readable
currentActivity.title = @"Current Activity";
// Configure additional properties like userInfo which will be included in the activity
currentActivity.userInfo = @{@"informationKey" : @"value"};
// Configure the activity so the system knows what may be done with it
// It is important that you only set YES to tasks that your application supports
// In this example, we will only enable the activity for use with Handoff
[currentActivity setEligibleForHandoff:YES];
[currentActivity setEligibleForSearch:NO]; // Defaults to NO
[currentActivity setEligibleForPublicIndexing:NO]; // Defaults to NO
// Set this activity as the current user activity
// Only one activity may be current at a time on a device. Calling this method invalidates any other current activities.
[currentActivity becomeCurrent];
Después de esto, la actividad anterior debería estar disponible para la transferencia (aunque se requiere más trabajo para manejar correctamente la "transferencia").