尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A paid chat marketplace between real people. React Native (bare, New
Architecture) + Supabase Postgres, with Supabase Realtime carrying the messages.
The product name is Pappal; the Android/React Native package id remains
com.companionchat / CompanionChat (ADR-0015).
Members find someone to talk to and talk to them. Providers are real, admitted people, there is no model in the message path. Positioning is peer support and deliberately not clinical: "Real people, ready to talk. Not therapy, just company." See ADR-0001 for why that sentence is load-bearing rather than marketing.
Two roles live in one app behind a server-gated role switch (ADR-0002); CI runs on GitLab (ADR-0003).
cp .env.example .env # fill in SUPABASE_URL and SUPABASE_ANON_KEY
npm install
npm run android
npm run android uses React Native's --active-arch-only path: it selects the
connected device/emulator, reports when none or several are available, and
builds only that device's native ABI instead of four architectures.
Backend, once per project:
supabase db push # applies migrations 001–047
supabase config push # applies auth config; anonymous sign-ins stay DISABLED
Google and Firebase phone OTP are the only sign-in options. See ADR-0004 and ADR-0006. Facebook was removed, not deferred.
Redirect URI for Google:
https://uvghvhcrovmuwivgijvl.supabase.co/auth/v1/callback
Google client type is Web application, not Android, despite this being an
Android app. Supabase exchanges the authorisation code server-side and needs the
client secret to do it. An Android OAuth client is a public client with no
secret, bound to a package name and SHA-1, and exists for the native Google
Sign-In SDK; Supabase cannot use one. Picking Android is the default mistake here
and the form even demands a SHA-1 fingerprint, which makes it look correct.
Then set the consent screen's Audience to Published, or add each tester
explicitly, a new screen starts in Testing and refuses everyone else. No Google
verification review is needed: Supabase requests only openid, email and
profile, which are non-sensitive scopes.
Create the OAuth client in chat-d8c87, the project that already hosts App
Distribution, not in an unrelated project. Google renders the consent screen's
app name from the Cloud project that owns the client, so borrowing a client
from another product makes the sign-in dialog say that other product's name.
Reusing one is fine to unblock local testing and must not ship: an unfamiliar
brand on a Google permission dialog reads as phishing, and OAuth verification is
per-brand.
The consent screen will show <project>.supabase.co, not the app name, until
brand verification passes. That is a different track from scope verification:
non-sensitive scopes (openid, email, profile) skip the "app isn't verified"
warning, and the app name and logo still stay hidden until the brand is
verified and published. Google shows the domain instead, deliberately, an
unverified app must not be able to claim an arbitrary name.
Brand verification cannot be completed from the console alone. It requires a homepage and a privacy policy on a domain you own, that domain verified in Google Search Console, and it added as the authorised domain. The current authorised domain is the Supabase project host, which is not ownable. So this is blocked on owning a domain, not on a setting.
Three things that block launch and are not in this repo:
delete_user_account()); Play also wants a web-reachable description of it.Chat send is a single Postgres RPC. Nine Edge Functions sit beside it for
auth exchange, push, SMS, invoices, and Cashfree (exchange-firebase-token,
send-push, send-call, send-sms, send-engagement, verify-phone,
generate-invoice, cashfree-webhook, create-order). Several hold
server-side secrets.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗