¿Hay alguna forma de detectar si el usuario presiona aceptar o rechazar la request de Airdrop?

Por lo tanto, tengo la function de lanzamiento de air funcionando, pero necesito que sucedan cosas diferentes si el usuario presiona aceptar y si el usuario presiona negar la request de lanzamiento.

Actualmente, las mismas acciones suceden si el usuario acepta o niega la request de lanzamiento.

Estoy usando

activityViewController.SetCompletionHandler(HandleActivityViewControllerCompletion); 

que tiene esta firma:

 private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error) 

El problema no es ninguno de estos parameters que puedo usar. Completado siempre devuelve true si el usuario realiza una elección y devuelve Items es nula.

¿Qué puedo usar o hacer para detectar si el usuario negó la request de Airdrop?

Esto es para una aplicación Xamarin.iOS, pero las respuestas en Swift / iOS nativo también están bien.

Pregunta SO similar sin respuesta: UIActivityViewController Airdrop: comtesting el estado cuando se envía o se declina

Hm, está bien, parece que mirar una bola de cristal es inevitable para responder a esto.

Lo probé en iOS 10.3.3 y, de hecho, no hay diferencia en el comportamiento de este método, independientemente de si Airdrop fue aceptado por el otro dispositivo o rechazó.

Al parecer, el boolean completed en el HandleActivityViewControllerCompletion hasta ahora significa esto: "Los datos se dieron a una actividad seleccionada" o "Los datos no se dieron a ninguna actividad". Corresponde a si el button debajo de la hoja de acciones dice "Listo" o "Cancelar". Desafortunadamente, la actividad de navigation fija este button a Hecho incluso cuando se rechazó la caída y, bueno, ese tipo de sentido, porque "hizo algo".

Creo que el problema (layout inteligente) radica en el hecho de que, por lo general, las actividades (personalizadas, por ejemplo) descartan todo el UIActivityViewController cuando llaman a activityDidFinish(_:) . La AidropActivity es obviamente especial porque parece que no lo hace en absoluto , simplemente muestra un indicador "Rechazado" debajo de su ícono cuando la connection pasa pero el otro lado, bueno, disminuye. Además, cambia el button de la hoja.

Además, toda la operación es asíncrona. Para mí, parece que la actividad de Airdrop llama a su function perform() o prepare(withActivityItems:) , inicia una connection remota de forma asíncrona e inmediatamente establece el button en "Done" mientras se ejecuta (ni siquiera veo una forma para otros actividades para hacer eso, pero no lo intenté). Incluso puede presionar Listo antes de que el otro lado haya aceptado o rechazado, que no abortará la transferencia. La Actividad incluso recibe una notificación (si la hoja aún no se cerró con "Listo") para actualizar su ícono.

En general, parece tener privilegios especiales, lo que tiene sentido, ya que toda la funcionalidad de Airdrop es especial: se ejecuta en segundo plano. La actividad simplemente le pasa los datos y, tan pronto como esto se hace, también se realiza (independientemente del resultado).

Por supuesto, estoy de acuerdo con que esto es insuficiente, pero cambiar esto probablemente requiera que Apple cambie la API. Entonces sería una request de function para usted, dudo mucho que haya una solución (AppStore conform) que no pensé …