确保在 React Native 中关闭 NFC

Posted

技术标签:

【中文标题】确保在 React Native 中关闭 NFC【英文标题】:Make sure NFC is turned off in React Native 【发布时间】:2021-12-29 14:15:08 【问题描述】:

在我的 React Native 应用程序中,其中一个屏幕显示 QR 码。该 QR 码应放置在具有 NFC 功能的 QR 码阅读器中。

我的任务是确保 NFC 已关闭。是的,我的应用程序没有任何 NFC 特性或功能。 androidManifest 或 Info.plist 中没有设置权限。

这只是 QR 码提供商(来自荷兰的 NS)的要求,以确保 NFC 已关闭。如何制作?

是否有可能此时另一个应用程序以某种方式使用了 NFC?

更新:

一般来说,问题在于 Apple Pay 和 Google Pay。尝试从屏幕上扫描二维码时,会弹出两个支付应用程序,从而阻止读取二维码。

所以这个想法只是在使用我们的应用程序时禁用这些支付应用程序。

对于 ios 可以使用权利https://developer.apple.com/documentation/passkit/pkpasslibrary/1617078-requestautomaticpasspresentation

尚未找到适用于 Android 的类似内容。

Github 上的相关问题https://github.com/revtel/react-native-nfc-manager/issues/455

【问题讨论】:

对于 iOS,您可以向 Apple 申请一个特殊的entitlement,允许您的应用关闭 NFC 检测,以便在这种情况下不会触发 Apple Pay。 真的需要更多关于二维码阅读器的详细信息,它是作为 NFC 阅读器还是作为 NFC 标签的 NFC 功能? 一般的解决办法是禁用Apple Pay和Google Pay。 * 苹果指令codereviewcache.com/disable-apple-pay 【参考方案1】:

我必须在 RN 应用程序中使用 NFC 功能。这是我用过的包:https://github.com/revtel/react-native-nfc-manager。设置在 Android 上很简单,但在 iOS 上可能会很棘手:https://github.com/revtel/react-native-nfc-manager/blob/main/setup.md

您有诸如isEnabled(): Promise<boolean>;isSupported(): Promise<boolean>; 之类的方法。我相信它们对你来说已经足够了。

免责声明: 我从未尝试使用这些函数直接检查:我通常检查状态的变化,因为我需要发出一些警告。

此外,我不只是检查打开或关闭。我使用某些东西是因为我需要确保 iPhone 可以使用 NFC 进行读/写(而不仅仅是支付)

try 
    await NfcManager.isSupported(NfcTech.Iso15693IOS);
 catch (error) 
    // set state = off and unsupported

【讨论】:

在 Android 上至少你不能以编程方式关闭 NFC,你必须提示用户这样做,我猜你可能在 iOS 上也有同样的问题,但不确定。【参考方案2】:

所以Apple Pay和Google Pay的问题如下:

尝试在移动设备上扫描二维码 实际行为:弹出支付应用 预期行为:QR 停留在屏幕上

所以这个想法只是在使用我们的应用程序时禁用这些支付应用程序。

指导如何禁用 Apple Pay http://www.codereviewcache.com/disable-apple-pay/ 提示如何禁用 Google Pay Android app enable NFC only for one Activity

【讨论】:

以上是关于确保在 React Native 中关闭 NFC的主要内容,如果未能解决你的问题,请参考以下文章

切换到下一个文本输入字段而不在 react-native 中关闭键盘

使用 react-native-firebase 在 Android 中关闭应用程序时未收到 fcm 消息

如何在 React Native 中检测键盘何时打开或关闭

如何在本机反应中关闭系统键盘

带有 Expo 的 React-Native Shake 事件检测器

InputStream 在 spring 控制器中关闭