
WishKit has no React Native package. Canny’s “mobile widget” is a WebView that will not render without SSO. Featurebase and Nolt are the same shape.
If you ship one RN binary to both stores, you have three options. Only one of them is an SDK.
WishKit alternative for Android · Does Canny have a mobile SDK? · Best in-app feedback SDKs.
The three options
| Native / JS SDK | Generic WebView | Canny mobile embed | |
|---|---|---|---|
| What you ship | npm package + your screen (or theirs) | WebView → board URL | WKWebView / Android WebView → webview.canny.io |
| Login to vote | Optional identity | Usually a hosted login | SSO required (Canny docs) |
| Theming | Your RN styles / their board component | Their website chrome | Canny chrome + theme= query param |
| Offline | List can cache; submit queues or fails in-app | Blank page | Blank page |
| Metadata | OS, screen, locale, app version from Platform / Dimensions | User-Agent | User-Agent + Identify if SSO works |
| App Review / Play | Normal Settings screen | Fine if it is clearly your board | Fine. Completion rate is the loss |
| WishKit | No RN artifact | You would wrap wishkit.io | n/a |
| Second store | Same JS, one widget ID | Same URL, same problems | Same WebView twice |
“SDK” means the UI is React Native views and the network calls are yours. A URL in react-native-webview is a website.
1. Native / JS SDK
Package: @feedbackjar/react-native-sdk (0.7.1)
Docs: React Native SDK
Min RN: 0.70. Autolinked native helpers for app id + storage; networking uses fetch, Platform, and Dimensions. No manual linking.
import { FeedbackJar, FeedbackJarBoard } from '@feedbackjar/react-native-sdk';
FeedbackJar.configure({ widgetId: 'your-widget-id' });
// Drop-in board
<FeedbackJarBoard accentColor="#e5484d" />
// Or your own screen
const result = await FeedbackJar.submit(text);
await FeedbackJar.vote(postId); Same widget ID as the Swift and Kotlin packages. iOS, Android, and RN do not get three backlogs.
Identity is optional:
await FeedbackJar.setIdentity({ name: user.name, email: user.email });
// logout
await FeedbackJar.clearIdentity(); Guest votes use a per-install id. Reinstall resets it. That is the point — not an advertising id.
Friction: you write or drop in a screen that looks like the rest of the app. Keyboard, dark mode, and back gesture are RN’s. Offline submit fails in your UI instead of showing a white WebView.
2. Generic WebView (Featurebase, Nolt, Canny site, WishKit web)
<WebView source={{ uri: 'https://your-company.canny.io' }} /> Works until it does not:
- Auth opens a popup or a new window. RN WebView eats that.
- Third-party cookies. Nolt documents this and tells you to flip
localStorage+ an unofficialskipTestsflag. - Theme is their marketing site inside Settings.
- Cold start is HTML/CSS/JS. Airplane mode is an empty screen.
- Metadata is a UA string unless you inject JS.
Use this when the board is a rare support hatch, not a product surface.
3. Canny’s official mobile embed
Not the generic site. Canny’s own recipe:
WKWebView/ Android WebViewhttps://webview.canny.io?boardToken=...&ssoToken=- Mint
ssoTokenon your server
Their docs: the mobile widget only works with SSO. No token → send the user to your-company.canny.io in the browser.
That is the hidden cost. You do not “add Canny to RN.” You add JWT minting, a WebView, and a fallback to Safari. Full cut.
App Review does not care. Users who bounce on the login wall do.
App Review, Play, and theming
A Settings row labelled “Feature requests” that posts text and votes is normal app functionality. Declare what you collect. Do not scrape an advertising id for guest voting.
A WebView of a third-party board is also usually fine. The review risk people worry about is overstated. The product risk is not: mismatched type, cookie banners, and a login you did not design.
Dark mode: native SDK follows the app. WebView follows the website, which may fight userInterfaceStyle.
What to pick
- RN is the product, both stores, one backlog → JS SDK, same widget ID as native if you also have a Swift/Kotlin app.
- Canny already runs the website and mobile is a companion → keep Canny on the web. Do not force the SSO WebView unless you will maintain the token path.
- WishKit on iOS, RN for Android → you will run two tools. WishKit alternative when the double-count hurts.
Trial is 7 days, no card: feedbackjar.com.
Short install (if you already picked the SDK)
npm install @feedbackjar/react-native-sdk@0.7.1 // App.tsx
import { FeedbackJar } from '@feedbackjar/react-native-sdk';
FeedbackJar.configure({ widgetId: 'your-widget-id' }); Settings stack:
<Pressable onPress={() => navigation.navigate('Feedback')}>
<Text>Feature requests</Text>
</Pressable>
// Feedback screen
<FeedbackJarBoard /> Seed two posts in the dashboard before you ship the screen. An empty board looks like a bug.
FAQ
Does WishKit work in React Native?
No RN package. Apple-only native SDK + a web widget.
Is @feedbackjar/react-native-sdk a native module?
It ships two small autolinked helpers (app id + on-device storage). No manual pod / Gradle steps. Networking is JS fetch.
Can I keep Canny on web and this SDK in the app?
Yes. Two lists. Import later if the split gets painful.
Offline?
SDK: your screen can show a cached list and a failed submit. WebView: empty.
Bottom line
If the install instructions start with “create a WebView,” you do not have a React Native feedback SDK. You have a website with extra steps.
Start a 7-day trial. Same widget ID on RN, iOS, and Android.