簡體   English   中英

如何通過NFC標簽啟動我的應用程序?

[英]How to launch my app via NFC tag?

我目前正致力於將應用程序移植到UWP。 該應用程序有一個頁面,其中包含“寫入NFC”按鈕。 在用戶點擊它之后,它等待NFC標簽並寫入LaunchApp:WriteTag二進制消息。

什么在WP8.1下工作正常,在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());
}

不幸的是,這不起作用。 NFC功能已啟用,WP8.1應用程序可在同一部手機上運行,​​因此這不應成為問題。

我已經嘗試了多種格式,因為問題似乎是launchAppMessage ,我沒有找到UWP文檔。 有一篇Windows 8+ MSDN文章,它描述了格式為的字符串:

myArgs\tWindows\tAppFamilyName!App

我嘗試了什么:

  1. myArgs很短 - 不應該是個問題。
  2. WindowsWindowsPhone沒有任何區別。 兩者都不起作用。
  3. AppFamilyName是我的應用清單中正確的應用系列名稱。 該應用程序與商店相關聯,看起來這也不應該是問題。
  4. App是我的應用程序清單中的<Application id="App" ... /> 嘗試MyAppNamespace.App也不起作用,調用CurrentApp.AppId (WinRT應用程序中使用的內容)會引發異常。

“不工作”我的意思是它寫入標簽,但Windows 10根本無法識別標簽。

我發現的另一件事是,對於myArgs\\tWindows\\tAppFamilyName!App ,應用程序拋出以下異常 - 沒有任何進一步的細節:

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

我真的希望有人知道如何解決這個問題。 不幸的是,目前還沒有UWP樣本,而且文檔仍舊是舊的......:/

PS:與WindowsUri:WriteTag一起使用自定義協議WindowsUri:WriteTag工作正常,但我只想用NFC標簽打開我的應用程序。 此外,確認對話框看起來像“你想打開與mycustomprotocol相關的應用程序嗎?” - 看起來不是非常用戶友好。 所以這對我來說不是真正的解決方案,更多我不想使用的解決方法。

Windows 10移動UWP

如果您只針對Windows 10移動版,那么8.1方式仍然有效,因為您獲得了正確的應用程序ID。 它可以通過以下方式檢索:

Windows.ApplicationModel.Store.CurrentApp.AppId

但是,這僅適用於通過商店安裝應用程序時,因為在商店關聯/發布期間分配了ID。 在開發人員部署的構建版本中,API將通過“來自HRESULT的異常:0x803F6107”崩潰。

然后,生成的LaunchApp記錄需要平台“WindowsPhone”和該應用程序ID。 以下代碼通過開源NFC / NDEF庫( https://github.com/andijakl/ndef-nfc )創建LaunchApp標記,並在Windows 10 Mobile上運行 - 用於編寫標記和啟動應用程序。 再次 - 鑒於它已通過商店發布和安裝:

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

不幸的是,PC的情況有所不同。 上面的方法在那里不起作用,Windows 8.1的文檔化方法也沒有。

我到目前為止最接近的是讓Windows 10識別LaunchApp標簽並在正確的頁面上打開商店。 但Windows /商店沒有意識到該應用程序已經安裝,因此無法打開它。

這是代碼,再次使用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);

當然,您還可以將兩個平台ID組合到一個NFC標簽中,因為您有足夠的可寫內存,因為這些應用ID很大。

這是一種方式:

  1. 注冊后台任務並使用NFC觸發器
  2. 注冊您的應用程序以激活uri。
  3. 編程后台任務以在使用NFC標簽輕觸時激活,然后啟動app suing URI方案

    //設置推薦的應用程序

     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); 

如果您有一個WP8.1應用程序並在Windows Phone 10上運行此應用程序並想要在手機上編寫NFC標簽,則必須檢索AppId 這是通過打開Windows開發中心打開相應的應用程序,單擊App Management然后單擊App Management App identity 然后在URL for Windows Phone 8.1 and earlier版本的點URL for Windows Phone 8.1 and earlier下復制GUID並替換Windows.ApplicationModel.Store.CurrentApp.AppId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM