Developer
React Native mobile app
B
Written by Bird Pickup & Delivery
Updated October 23, 2026
Show the Bird Pickup & Delivery scheduler on your app’s cart screen, between the cart items and the checkout button, or availability on a product screen. It uses your Bird settings and saves the customer’s choice to the cart your app checks out with.
Try it
Open a live demo on your phone or in the browser (iOS or Android preview):
Requirements
- Bird Pickup & Delivery on the Scale plan.
- Your app uses a Shopify Storefront API cart and checks out with its
checkoutUrl.
Install
Package: @birdchime/react-native on npm
npm install @birdchime/react-native react-native-webview
Usage
Cart widget
import { BirdWidget } from '@birdchime/react-native';
const bird = useRef(null);
<ScrollView ref={scrollRef}>
<CartItems cart={cart} />
<BirdWidget
ref={bird}
shop="your-store.myshopify.com"
cart={cart}
onInputFocus={(y) => scrollRef.current?.scrollTo({ y: widgetY + y - 80 })}
/>
</ScrollView>
<Button
title="Checkout"
onPress={() => {
if (bird.current?.reportValidity() === false) return; // the widget shows what's missing
openCheckout(cart.checkoutUrl);
}}
/>
Product widget
Shows pickup and delivery availability for the variant on screen.
<BirdWidget shop="your-store.myshopify.com" type="product" item={{ variantId }} />
Props
💡
| Prop | Required | Description |
|---|---|---|
shop |
Yes | Your *.myshopify.com domain. |
type |
No |
'cart' (default) or 'product'. |
cart |
Cart widget | Your Storefront API cart, passed as-is. |
item |
Product widget |
{ variantId } of the variant on screen. |
customer |
No |
{ id, tags, loggedIn } of the customer. |
locale |
No | Widget language, for example 'fr'. |
onChange |
No | Receives { selection, isSyncing, saveError, checkout }, the same names as the SDK state on the web. |
onError |
No | Called if the widget can’t load. |
onInputFocus |
No | Receives the focused field’s position, so you can scroll it into view. |
ref.current?.reportValidity() works like the browser’s form.reportValidity(): true when checkout can proceed, false when it can’t (the widget shows the fields the customer still has to fill in), and undefined if the widget hasn’t loaded or can’t load.
Good to know
-
Checkout: call
reportValidity()when the button is tapped and block only onfalse, so checkout keeps working if the widget can’t load. Don’t disable the button. -
Updates: only
shopandtypereload the widget.cart,customer,localeanditemupdate in place. -
Cart attributes: if your app calls
cartAttributesUpdate, include the cart’s existing attributes, or the customer’s choice is erased. -
iOS: add
NSLocationWhenInUseUsageDescriptiontoInfo.plistfor nearest-store lookup.
Related Articles
Was this article helpful?
Thanks for your feedback!