繁体   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