Pregunta ¿Cómo iniciar mi aplicación a través de la etiqueta NFC?


Actualmente estoy trabajando en portar una aplicación a UWP. La aplicación tiene una página con un botón "Escribir en NFC". Después de que el usuario lo toque, espera una etiqueta NFC y escribe una LaunchApp:WriteTag mensaje binario

Lo que funcionó bien bajo WP8.1, no funciona en absoluto bajo Windows 10 UWP:

var proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
{
    var launchArgs = "user=default";

    var appId = "App";
    var appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + appId;

    var launchAppMessage = launchArgs + "\tWindows\t" + appName;

    var dataWriter = new Windows.Storage.Streams.DataWriter();
    dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
    dataWriter.WriteString(launchAppMessage);
    var launchAppPubId = proximityDevice.PublishBinaryMessage("LaunchApp:WriteTag", dataWriter.DetachBuffer());
}

Lamentablemente, esto no funciona. La capacidad NFC está habilitada y la aplicación WP8.1 funciona en el mismo teléfono, por lo que esto no debería ser un problema.

Ya probé múltiples formatos ya que el problema parece ser el launchAppMessage, donde no encontré un documento de UWP para. Hay una Windows 8+ Artículo de MSDN, que describe la cadena en el formato:

myArgs\tWindows\tAppFamilyName!App

Lo que probé:

  1. myArgs es lo suficientemente corto, no debería ser un problema.
  2. Windows o WindowsPhone no hace ninguna diferencia. Ambos no funcionan.
  3. AppFamilyName es el nombre correcto de la familia de la aplicación que está dentro del manifiesto de mi aplicación. La aplicación está asociada a la tienda y parece que este no debería ser el problema también.
  4. App es lo que hay adentro <Application id="App" ... /> en mi aplicación manifiesta Molesto MyAppNamespace.App no funcionó tan bien y llamando CurrentApp.AppId (lo que se usa en las aplicaciones WinRT) arroja una excepción.

Al decir "no funciona" me refiero a que se escribe en la etiqueta, pero Windows 10 no reconoce la etiqueta.

Una cosa más que encontré, es que para myArgs\tWindows\tAppFamilyName!App la aplicación arroja la siguiente excepción, sin más detalles:

System.ExecutionEngineException was unhandled
Message: An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.

Realmente espero que alguien tenga una idea sobre cómo resolver esto. Lamentablemente, todavía no hay muestras de UWP para esto y los documentos siguen siendo los antiguos ...: /

PD: usando un protocolo personalizado junto con WindowsUri:WriteTag funciona bien pero solo quiero que mi aplicación se abra con la etiqueta NFC. Además, el cuadro de diálogo de confirmación aparece como "¿Desea abrir la aplicación asociada con mycustomprotocol?" - que no parece muy fácil de usar. Así que esa no es una solución real para mí, más una solución alternativa que no quiero usar.


32
2017-12-11 10:53


origen


Respuestas:


Windows 10 Mobile UWP

Si solo tiene como objetivo Windows 10 Mobile, la forma 8.1 aún funciona, dado que obtiene la ID de la aplicación correcta. Se puede recuperar a través de:

Windows.ApplicationModel.Store.CurrentApp.AppId

Sin embargo, eso solo funciona cuando la aplicación se instala a través de la tienda, ya que la identificación se asigna durante la asociación / publicación de la tienda. En las construcciones desplegadas por el desarrollador, la API se bloqueará con "Excepción de HRESULT: 0x803F6107".

El registro de LaunchApp resultante necesita la plataforma "WindowsPhone" y la ID de la aplicación. El siguiente código crea una etiqueta LaunchApp a través de la biblioteca de código abierto NFC / NDEF (https://github.com/andijakl/ndef-nfc) y funciona en Windows 10 Mobile, tanto para escribir la etiqueta como para iniciar la aplicación. Nuevamente, dado que ha sido publicado e instalado a través de la tienda:

var record = new NdefLaunchAppRecord { Arguments = "Hello World" };
var appId = Windows.ApplicationModel.Store.CurrentApp.AppId;    // Note: crashes when app is not installed through app store!
record.AddPlatformAppId("WindowsPhone", appId);
var message = new NdefMessage { record };
proximityDevice.PublishBinaryMessage("NDEF:WriteTag", msgArray.AsBuffer(), MessageWrittenHandler);

Windows 10 PC

Desafortunadamente, las cosas son diferentes para las PC. El método anterior no funciona allí, tampoco lo hace el método documentado para Windows 8.1.

Lo más cerca que pude llegar hasta ahora es lograr que Windows 10 reconozca la etiqueta LaunchApp y abrir la tienda en la página correcta. Pero Windows / la tienda no se da cuenta de que la aplicación ya está instalada y, por lo tanto, no la abre.

Este es el código, nuevamente utilizando la biblioteca NFC / NDEF:

var record = new NdefLaunchAppRecord { Arguments = "Hello World" };
var familyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
var appId = Windows.ApplicationModel.Store.CurrentApp.AppId;    // Note: crashes when app is not installed through app store!
record.AddPlatformAppId("Windows", "{" + familyName + "!" + appId + "}");
var message = new NdefMessage { record };
proximityDevice.PublishBinaryMessage("NDEF:WriteTag", msgArray.AsBuffer(), MessageWrittenHandler);

Por supuesto, también puede combinar las dos ID de plataforma con una sola etiqueta NFC, dado que tiene suficiente memoria grabable, ya que esas ID de aplicación son enormes.


5
2018-01-28 08:42



Aquí hay una manera:

  1. Registre una tarea de fondo y use un disparador NFC
  2. Registre su aplicación para la activación de uri.
  3. Programe la tarea de fondo para activarla cuando se toque con una etiqueta NFC y luego inicie la aplicación demandando esquemas de URI

    // Establecer la aplicación recomendada

    var options = new Windows.System.LauncherOptions();
    options.PreferredApplicationPackageFamilyName= "Contoso.URIApp_8wknc82po1e";
    options.PreferredApplicationDisplayName = "Contoso URI Ap";
    
    // Launch the URI and pass in the recommended app 
    // in case the user has no apps installed to handle the URI
    var success = await Windows.System.Launcher.LaunchUriAsync(uriContoso, options);
    

1
2017-12-23 13:40



Si tiene una aplicación WP8.1 y ejecuta esta aplicación en Windows Phone 10 y desea escribir etiquetas NFC en su teléfono, debe recuperar el AppId. Esto se hace abriendo el Windows Dev Center abra la aplicación correspondiente, haga clic App Management y entonces App identity. Luego debajo del punto URL for Windows Phone 8.1 and earlier copia el GUID y reemplazar Windows.ApplicationModel.Store.CurrentApp.AppId


0
2018-03-30 07:52