通过NFC标签共享Wifi凭据,无需特殊应用程序

31
我正在寻找一种创建NFC标签的方法,该标签可以共享我的网络的WiFi凭据,而无需我的客人在手机上安装任何特殊的NFC应用程序(除了随手机预装的应用程序)。我一直在查看诸如NFC Tag Writer、WifiTap、NFC Task Launcher和NFCLabels.com等应用程序和服务,但我似乎需要在客人的手机上安装这些应用程序才能使用它,但我无法进行测试,因为我只有一个NFC启用的手机可用。(是的,我知道,白费劲了,但是让人头疼的行为也不是什么新鲜事…)
我最接近的线索是WifiTap声明:

The app processes URIs in the format of wifi://[network ssid]/[wep|wpa|open]/[network key]

如果这实际上是通用的,那么这意味着我可以做到我想做的事情,但我没有找到任何确认。因此,如何完成我想要的操作,我的思路是否正确?
5个回答

22

1
如果您想长按网络以写入NFC标签,请记得打开NFC。 - Rui Santos
在这个问题的基础上,我编写了一个应用程序,使用与Android相同的格式将Wi-Fi凭据写入NFC标签:https://github.com/bparmentier/WiFiKeyShare - Bruno Parmentier

11

这种情况有一个官方标准:NFC Forum连接交换技术规范。然而,Android目前不支持此标准。我认为目前没有任何方法可以在没有专门应用程序的帮助下使用NFC传输WiFi凭据。

一种解决方法是创建(或查找)一个具有以下属性的Google Play Store应用:

  1. ACTION_NDEF_DISCOVERED的Intent过滤器,以URI形式指定Play Store中应用的URL
  2. ACTION_NDEF_DISCOVERED的Intent过滤器,以某些专有类型(例如MIME类型)的形式指定

然后,您可以创建包含以下NDEF记录的标签:

  1. SmartPoster记录,包含Play Store URI和一些描述性文本(例如应用名称)
  2. 包含WiFi凭据的专有类型记录
  3. Android应用程序记录,用于启动或重定向设备用户到Play Store安装该应用程序

第3个记录将确保始终启动正确的应用程序,或将设备用户重定向到Play Store安装它。但是,这仅适用于ICS,然而第1个记录(与第1个Intent过滤器结合使用)在Gingerbread上起到相同的作用。


连接切换规范不是用于短期点对点连接吗?我的理解是,它的目的是为了促进长消息的传输,而这些消息仅通过NFC无法实现,而不是作为通用网络配置协议。我希望Android能够实现这一点,事实上它确实做到了——请参见http://androidxref.com/4.1.1/xref/packages/apps/Nfc/src/com/android/nfc/handover/HandoverManager.java。 - Ian Ni-Lewis
@IanNi-Lewis,规范在这一点上并不是非常清楚。例如,在第2.1节中的介绍中没有提到所得连接持续的时间长度。然而,我特别考虑了“静态切换”情况(第2.3节),其中Handover Selector不是NFC Forum设备,而是使用标签来建立(非NFC)连接。在您提到的代码中,这仅针对Bluetooth音频连接在parse()函数中实现。 - NFC guy
1
今天的状态是什么?谢谢 - igr

2
我创建了一个应用程序,可以按照标准化的方式将网络写入标签 - 问题在于Android目前无法识别切换记录并自动添加它们。也许这样做是正确的 - 毕竟添加网络不仅仅是添加网络;例如,您可能需要验证标签内容的作者等信息。

此外,如果您想向标签中写入多个网络,可能没有足够的空间以正确(使用标准化记录)的方式进行操作。


链接失效,应用被“全能”的谷歌移除了? - Pedro Lobito

1
我可能理解有误,但是使用从Play商店下载的NFC工具应用程序,您可以将WiFi网络写入标签,当使用默认Android 5.0.2在Nexus 7 2013上扫描时,会打开一个消息框询问WiFi连接的确认,尽管这一直失败除了。

3
是的,这是一个来自2012年的旧问题。在Lollipop系统中,我可以长按WIFI设置中的加密网络,然后选择“写入NFC标签”。当我扫描这个标签时,我的Nexus 4和5(使用Lollipop系统)能够连接到该网络。 - Alex

0

形如 WIFI:T:WPA;S:SSID;P:PASSPHRASE;; 的 URI,如果被编码成 QR 码并扫描,则会设置 WiFi;但是当被编码成 NFC 标签时,它无法被识别为 URI。这表明 Android 中的 NFC API 存在缺陷。


4
据我所知,处理该字符串(它是否甚至是一个URI?)的程序在ZXing的条形码扫描器中,而不是Android操作系统中。如果是这样的话,期望不相关的Android组件能够处理它似乎是不合理的。 - Ian Ni-Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接