Authentication
Identify signed-in users so feedback, votes, and comments attribute to a real account instead of a per-install anonymous token.
Feddy is anonymous-first. Once you call Feddy.configure(...), every
submission and vote is attributed to a per-install anonymous token (e.g.
anon_a1b2c3d4). That works fine for apps without sign-in.
If your app does have accounts, call Feddy.identify(...) after sign-in
and Feddy reconciles previous anonymous activity to the real user ID —
nothing is lost.
Identify after sign-in
Call identify(...) once your app knows who the user is. Like other
writes, it's synchronous, fire-and-forget, and never throws.
Minimal — userId only
Feddy.identify(userId: "user_abc")With email
Feddy.identify(
userId: "user_abc",
email: "alice@example.com"
)Full profile
Feddy.identify(
userId: "user_abc",
email: "alice@example.com",
displayName: "Alice Chen",
avatarURL: URL(string: "https://example.com/avatar.jpg")
)Only userId is required. email, displayName, and avatarURL are
optional — pass them as you collect them.
Anonymous reconciliation
If a user submits feedback before signing in, then signs in later, the flow looks like this:
Pre sign-in
Feddy.configure(apiKey: "fed_xxxxxxxxxxxx")
Feddy.submitRequest(title: "Add dark mode")
// Attributed to anon_a1b2c3d4Sign-in happens
Feddy.identify(userId: "user_abc", email: "alice@example.com")
// Server links anon_a1b2c3d4 → user_abcSubsequent activity
Feddy.submitRequest(title: "Allow custom themes")
// Attributed directly to user_abcIn the dashboard, all three submissions surface under Alice's identity.
Why anonymous-first?
Most "send feedback" actions happen before users have logged in or created an account — frustration is highest at exactly that moment. Forcing sign-in for feedback loses the most valuable data points.
Logout
Clear the configured client and any cached identity when the user signs out:
Feddy.logout()After logout(), subsequent writes go back to a fresh anonymous token
until you call configure(...) and identify(...) again.
What's next
Installation
From package install to a working feedback sheet in one flow — Swift Package Manager, configure, identify, drop in RequestComposeView, verify in the dashboard.
Common Flows
Submit feedback, surface the roadmap, build a custom UI on top of the async API, and handle errors. Covers RequestComposeView, RequestListView, programmatic submit / fetch / vote / comment, and FeddyError patterns.