Auraphone:一个在活动中收集人们信息的简单应用程序。
Auraphone: A simple app to collect people's info at events

原始链接: https://andrewarrow.dev/2025/11/simple-app-collect-peoples-info-at-events/

安德鲁正在开发Auraphone,一款利用蓝牙技术革新活动社交的应用。这款应用允许用户仅通过彼此靠近的方式分享联系信息——姓名、照片、社交媒体链接——从而避免了尴尬的交换电话号码的情况。 尽管安德鲁拥有丰富的蓝牙开发经验(包括在Bird电动滑板车公司的工作),但构建Auraphone却出乎意料地复杂,因为许多设备同时广播和连接带来了挑战。安德鲁最初尝试使用客户端-服务器模型来管理连接,但遇到了蓝牙的细微之处以及iOS和Android平台之间的差异问题。 他甚至构建了一个基于Go语言的蓝牙协议栈模拟器来辅助测试,但最终发现实际设备的日志记录对于调试更有效。Auraphone现在已在iOS App Store上架,并提供Android的APK版本,目前正在BLANKSPACES Culver City进行测试。安德鲁正在寻求用户对连接可靠性、数据同步和整体实用性的反馈。目标是提供无缝的社交体验,让用户在轻松捕捉联系信息的同时,能够专注于对话。

## Auraphone:一款社交应用 - 摘要 Auraphone是一款旨在简化活动中信息交换的新应用,超越名片和二维码。其核心理念是利用蓝牙自动收集附近用户的联系信息,同时保持自然的对话流程——消除重复细节的尴尬请求。 开发者设想的应用场景包括商务社交、速配以及基于兴趣的聚会,例如222.place活动。然而,初步反馈显示存在重大障碍:双方都需要下载并主动运行该应用,可能分散注意力,并消耗电池。人们对广泛采用的实用性以及考虑到现有解决方案(如二维码)的情况下,它是否解决了实际问题表示担忧。 过去尝试类似功能(Palm Pilots、Apple的NameDrop、LinkedIn的“查找附近的人”)都面临挑战。开发者强调该应用的去中心化特性——无需后端服务器以保障隐私和可靠性——以及蓝牙在基于近距离连接方面的优势。虽然一些人看到了潜力,尤其是在活动组织者推广该应用的情况下,但许多人质疑其可用性以及它是否能提供足够的优势来克服采用的阻力。
相关文章

原文

Hi, I'm Andrew, and I'm building Auraphone, a simple app to collect people's info at events.

I've been a developer for many years and I thought I knew bluetooth well. I was an early employee of the scooter company Bird back in 2017 and wrote a lot of the ios and android bluetooth to "bird brain" logic. But I started a new bluetooth app that is a lot more complex. Imagine a room full of people at a big networking event. Every phone broadcasts a bluetooth service and every phone tries and connects, all at the same time! I'm building this app to bring networking events into the year 2026! We all have bluetooth phones with us, lets use them to solve this who is going to give who their phone number issue. Here is what it does:

  • You set your name, photo, and what info you want to share. Maybe just your instagram username, maybe your email and linked in too, your choice what to broadcast.
  • Walk around your networking event and collect all this info from people you are in close range to.
  • Have a record of everyone you actually meet IRL at this event.

Think of the term "peripheral" as server and "central" as client. Yes there are differences in bluetooth and there are reasons for those terms, but my life got much easier working on this app when I started just thinking client server. So in a room with just two phones, which one is which? It can't be a coin toss. If 50% of the time both phones act as the server and neither client, bad. Or if both phones act as clients, bad. So how do you break the tie? You start up your server AND you act as a client looking for servers to connect to. Just be careful not to connect to yourself!

With bluetooth your server advertises and when you connect it tells you what characteristics it has. Think of characteristics as "endpoints". They are not the same as an http endpoints at all but again my life got easier when I started thinking of them like this. Our app has two characteristics PROFILE_CHAR and PHOTO_CHAR and step one is a client hits PROFILE_CHAR endpoint and gets back json from the other phone with device_id, first_name, photo_hash, instagram and it doesn't have to be json. It could be Protocol Buffers and binary but again, I went with json and yes, easier life.

So with my 200 OK from PROFILE_CHAR endpoint I look at the photo_hash which is a 256 sha from the binary data of the image the user picked. If I have this file already cached, I'm good and I disconnect from this server. If not I hit the PHOTO_CHAR endpoint and get this image data and save as hash.jpg locally. And then I disconnect.

After I disconnect from a server I place that specific bluetooth server id on a cooldown list. I have other phones in the room I need to connect with! And all this time I'm also acting as a server myself. Well, sometimes. Sometimes when I'm busy being a client getting a photo I'll pause my server actions. And it depends on ios vs android. There is lots of complexity in the BLE (bluetooth low energy) stack. This loop of find a server, connect, get my info, disconnect, repeat is a great little loop. But there are limits and GATT errors and queue buffers that get full and MTU (max transmission unit) that can make it so two phones right next to each other take a while before they finally find each other.

So I made github.com/andrewarrow/auraphone-blue which is a BLE stack simulator all written in golang. If you look at the wire package you'll see a pretty complete BLE implementation using the file system and domain sockets to mock the bluetooth radio. The swift package and kotlin package should look very familiar to anyone who has worked on ios or android BLE.

My plan was to run many mock phones this way and test all the weird BLE differences between ios and android here. It did not work. The only thing this golang auraphone-blue repo did for me was really help me understand how bluetooth works. This BLE stack that I made in golang doesn't help me fix ios and android bugs, it only introduces its own subtle golang filesystem ble bugs!

In the end nothing fixed all the bugs better than just running two real ios phones and two real android phones and having them write to disk very thorough logs PLUS ble specific json files showing exactly what each operation was doing and what info it got back. I ended up writing logic to zip up the entire local directory of the phone with all these files and logs and doing an HTTP POST to my local mac just to get all the data off all 4 phones quickly after each run.

Now it's not like this app will keep running when you have your phone in your pocket. iOS has rules on bluetooth connections and it's basically only if your app is running and foreground. So the way I see auraphone working at an event, you walk around and mingle as normal but yeah every one has their phone out and running the app but ONLY this app. You are still present and in the conversation not just looking at other distractions from your phone.

But now effortlessly after your conversation is done and you move around the room, you have a record of who that person was! Also the list is sorted by last updated_at desc so whoever you are near will be at the top. Great for when you have met someone earlier that night but forget their name. Now you just look down at your auraphone app that's already out and running and say oh hey jessie!

The app is in the ios app store. For android we serve up the apk at auraphone.apk. We are testing it now at BLANKSPACES Culver City. Looking to try it now in a room full of people! Give me reports of did your phones see each other? Did the contact info sync? Did it solve a problem for you?

联系我们 contact @ memedata.com