QR Exchange
QRコードを使用して、対面でActivityPubアカウントを簡単に交換するための仕様です。 LINEの友だち追加のような体験を分散SNSで実現します。
概要
QR Exchangeは、ActivityPubアカウントの情報をQRコードにエンコードし、 スマートフォンのカメラでスキャンすることで簡単にフォローできる機能です。
ユースケース
- 対面でのアカウント交換
- 名刺やポスターへのQRコード印刷
- イベントでの参加者同士の繋がり
QRコードフォーマット
QRコードには Yurucommu のプロフィールURLをエンコードします。
プロフィールURL形式
スキャナーは /profile/ パスと username hash
を読み取ります:
https://example.com/profile/https%3A%2F%2Fexample.com%2Fap%2Fusers%2Falice#alice
スキャン処理フロー
1. QRコードのスキャン
カメラでQRコードを読み取り、プロフィールURLを取得します。
2. アクター情報の取得
取得したプロフィールURLからActivityPubアクターを解決します:
同一ドメインの場合
-
/profile/:actorIdのactorIdを decode - ローカル actor API でプロフィールを取得
別ドメインの場合
-
URL hash の username と QR URL の domain から
@user@domainを作る - リモート検索でプロフィールを取得
3. プロフィール表示
取得したアクター情報をユーザーに表示します:
- アイコン
- 表示名
- ユーザー名
- 自己紹介
- フォロワー/フォロー数
4. フォローアクション
ユーザーが「フォロー」ボタンを押すと、通常のActivityPub Followアクティビティを送信します。
実装例
QRコード生成(React)
import QRCode from 'qrcode.react';
function MyQRCode({ actorUrl }) {
return (
<QRCode
value={actorUrl}
size={256}
level="M"
/>
);
}
QRコードスキャン
import { Html5QrcodeScanner } from 'html5-qrcode';
function startScanner(onSuccess) {
const scanner = new Html5QrcodeScanner("reader", {
fps: 10,
qrbox: 250
});
scanner.render((decodedText) => {
onSuccess(decodedText);
scanner.clear();
});
}
アクター解決
async function resolveActor(qrData) {
const url = new URL(qrData);
const match = url.pathname.match(/\/profile\/([^\/\?]+)/);
if (!match) throw new Error('Invalid QR code');
const actorId = decodeURIComponent(match[1]);
const username = url.hash ? decodeURIComponent(url.hash.slice(1)) : null;
if (url.host === window.location.host) return fetchActor(actorId);
if (!username) throw new Error('Remote user info insufficient');
return searchRemote(`@${username}@${url.host}`);
}
セキュリティ考慮事項
悪意あるQRコード
- フォロー前に必ずプロフィールを表示し、ユーザーに確認を求める
- 自動フォローは行わない
- 外部URLへのリダイレクトに注意
プライバシー
- QRコードに個人情報を含めすぎない
- 公開プロフィールのURLのみを使用
UI/UXガイドライン
QRコード表示画面
- QRコードを大きく中央に配置
- ユーザー名を表示
- 共有ボタンを配置(Web Share API)
- 画像として保存できるオプション
スキャン画面
- カメラプレビューを表示
- スキャン枠のガイドを表示
- スキャン成功時のフィードバック
- 手動入力へのフォールバック
プロフィールプレビュー
- アクター情報を見やすく表示
- 「フォロー」ボタンを目立つ位置に
- キャンセルオプションを明確に
相互運用性
URL形式を使用することで、Yurucommu以外のActivityPub実装でも QRコードを読み取ってフォローすることができます。 特別な拡張プロトコルは不要です。
ヒント:
URL形式を使用すれば、QRコードをスマートフォンの標準カメラアプリで
スキャンしてもWebブラウザでプロフィールページを開くことができます。