Pertanyaan Bagaimana cara meluncurkan aplikasi saya melalui tag NFC?


Saat ini saya sedang mengerjakan pemindahan aplikasi ke UWP. Aplikasi ini memiliki halaman dengan tombol "Tulis ke NFC". Setelah pengguna mengetuknya, ia menunggu tag NFC dan menulis a LaunchApp:WriteTag pesan biner.

Apa yang bekerja dengan baik di bawah WP8.1, tidak berfungsi sama sekali di bawah 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());
}

Sayangnya ini tidak berhasil. Kemampuan NFC diaktifkan dan aplikasi WP8.1 bekerja pada telepon yang sama, jadi ini seharusnya tidak menjadi masalah.

Saya sudah mencoba beberapa format karena masalah tampaknya menjadi launchAppMessage, di mana saya tidak menemukan dokumen UWP untuk. Ada Windows 8+ Artikel MSDN, yang menjelaskan string yang akan diformat:

myArgs\tWindows\tAppFamilyName!App

Apa yang saya coba:

  1. myArgs cukup pendek - seharusnya tidak menjadi masalah.
  2. Windows atau WindowsPhone tidak ada bedanya. Keduanya tidak berfungsi.
  3. AppFamilyName adalah nama keluarga aplikasi yang benar yang ada di dalam manifes aplikasi saya. Aplikasi ini terkait dengan toko dan sepertinya ini seharusnya tidak menjadi masalah juga.
  4. App adalah apa yang ada di dalamnya <Application id="App" ... /> di manifes aplikasi saya. Mencoba MyAppNamespace.App tidak berfungsi dengan baik dan menelepon CurrentApp.AppId (apa yang digunakan dalam aplikasi WinRT) melempar pengecualian.

Dengan "tidak berfungsi", maksud saya adalah menulis ke tag, tetapi tag tidak dikenali oleh Windows 10 sama sekali.

Satu hal lagi yang saya temukan, adalah bahwa untuk myArgs\tWindows\tAppFamilyName!App aplikasi melempar pengecualian berikut - tanpa detail lebih lanjut:

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

Saya sangat berharap seseorang memiliki ide tentang bagaimana menyelesaikan ini. Sayangnya belum ada sampel UWP untuk ini dan dokumennya masih yang lama ...: /

PS: menggunakan protokol khusus bersama WindowsUri:WriteTag berfungsi dengan baik, tetapi saya hanya ingin aplikasi saya terbuka dengan tag NFC. Juga, dialog konfirmasi kemudian terlihat seperti "Apakah Anda ingin membuka aplikasi yang terkait dengan mycustomprotocol?" - yang terlihat sangat tidak ramah pengguna. Jadi itu bukan solusi nyata bagi saya, lebih merupakan solusi yang tidak ingin saya gunakan.


32
2017-12-11 10:53


asal


Jawaban:


Windows 10 Ponsel UWP

Jika Anda hanya menargetkan Windows 10 Mobile, cara 8.1 masih berfungsi, mengingat Anda mendapatkan ID Aplikasi yang tepat. Ini dapat diambil melalui:

Windows.ApplicationModel.Store.CurrentApp.AppId

Namun, itu hanya berfungsi ketika aplikasi diinstal melalui toko, karena ID ditugaskan selama asosiasi / penerbitan toko. Dalam build yang dikembangkan oleh pengembang, API akan macet dengan "Exception from HRESULT: 0x803F6107".

Catatan LaunchApp yang dihasilkan kemudian membutuhkan platform "WindowsPhone" dan ID aplikasi itu. Kode berikut membuat tag LaunchApp melalui pustaka NFC / NDEF open source (https://github.com/andijakl/ndef-nfc) dan berfungsi di Windows 10 Mobile - baik untuk menulis tag dan untuk meluncurkan aplikasi. Sekali lagi - mengingat itu telah diterbitkan & dipasang melalui toko:

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

Sayangnya, semuanya berbeda untuk PC. Metode di atas tidak berfungsi di sana, begitu juga metode yang didokumentasikan untuk Windows 8.1.

Yang paling dekat yang bisa saya dapatkan sejauh ini adalah mendapatkan Windows 10 untuk mengenali tag LaunchApp dan membuka toko pada halaman yang benar. Tetapi Windows / toko tidak menyadari bahwa aplikasi tersebut sudah diinstal dan oleh karena itu tidak membukanya.

Ini adalah kode, lagi menggunakan pustaka 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);

Tentu saja, Anda juga dapat menggabungkan dua ID platform ke satu tag NFC, mengingat bahwa Anda memiliki cukup memori yang dapat ditulis, karena ID aplikasi tersebut sangat besar.


5
2018-01-28 08:42



Inilah caranya:

  1. Daftarkan tugas latar belakang dan menggunakan pemicu NFC
  2. Daftarkan aplikasi Anda untuk aktivasi uri.
  3. Programkan backgroundtask untuk mengaktifkan ketika disadap dengan tag NFC dan kemudian meluncurkan skema URI yang menuntut aplikasi

    // Setel aplikasi yang disarankan

    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



Jika Anda memiliki aplikasi WP8.1 dan menjalankan aplikasi ini di Windows Phone 10 dan ingin menulis tag NFC di ponsel Anda, Anda harus mengambil AppId. Ini dilakukan dengan membuka Pusat Pengembang Windows buka aplikasi yang sesuai, klik App Management lalu App identity. Kemudian intinya URL for Windows Phone 8.1 and earlier salin GUID dan ganti Windows.ApplicationModel.Store.CurrentApp.AppId


0
2018-03-30 07:52