Documentation

Getting started with Ubriot CI/CD and Ubriot Notify.

CI/CD — iOS & Android builds

Ubriot handles iOS and Android builds in the cloud. Upload your signing credentials once and trigger builds from the CLI or dashboard.

1. Upload signing credentials

In the dashboard go to Credentials → Add credential. Upload your iOS distribution certificate (.p12), provisioning profile (.mobileprovision), and App Store Connect API key (.p8). For Android upload your keystore and Google Play service account JSON. All credentials are AES-256 encrypted at rest and never logged.

2. Trigger a build

From the CLI:

# iOS build + TestFlight submission
ubriot ship ios

# Android build + Google Play submission
ubriot ship android

# OTA update only (no build required)
ubriot update

Or go to Builds in the dashboard and click Trigger build.

OTA updates

Publish JavaScript-only changes directly to devices without waiting on App Store review. Roll forward or back from the dashboard at any time.

Configure your app

Point expo-updates at your Ubriot manifest URL (replace your-app-slug with your release app slug from Ubriot):

// app.config.js / app.json — updates.url (exact field depends on Expo SDK)
// Example manifest base:
"https://api.ubriot.dev/api/v1/ubriot/updates/manifest?appId=your-app-slug"

// Devices request updates on launch; channel matches your ubriot update --channel.

New binaries must include this URL. Existing installs keep their previous update host until users upgrade the app.

Publish an update

ubriot update --channel production --message "Fix checkout bug"

The update is live to all devices on the production channel within seconds. Roll back from the dashboard under Updates if needed.

Notify — push notifications

Send iOS and Android push notifications directly to APNs and FCM. Per-device pricing, auto-retry, campaigns, and delivery logs.

1. Upload push credentials

Go to Credentials in the dashboard. For iOS: add an APNs auth key (.p8 file with Key ID, Team ID, and Bundle ID). For Android: add a Firebase service account JSON from the Firebase console.

2. Install the SDK

npm install @ubriot/notify-rn

No additional dependencies. Works with Expo, react-native-firebase, or any push library.

3. Register at app launch

Get a native push token however your app already does it, then pass it to Ubriot:

import { UbriotNotify } from '@ubriot/notify-rn';
import * as Notifications from 'expo-notifications'; // or firebase, etc.

useEffect(() => {
  async function register() {
    const { data: nativeToken } = await Notifications.getDevicePushTokenAsync();
    await UbriotNotify.register({
      appId: 'your-app-id',
      nativeToken,
      platform: Platform.OS === 'ios' ? 'ios' : 'android',
      userId: currentUser?.id, // optional
    });
  }
  register();
}, []);

4. Send from your backend

Use the push server key from Credentials → Push server key:

curl -X POST https://api.ubriot.dev/api/v1/ubriot/push/send \
  -H "X-Ubriot-Push-Key: your-server-key" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["UbriotPushToken[abc123...]"],
    "title": "New message",
    "body": "Alice replied to your post",
    "data": { "screen": "chat", "threadId": "42" }
  }'

5. Broadcast campaigns

To send to all registered devices at once, go to Notify → Campaigns in the dashboard and click Send campaign. Choose a platform filter (All / iOS / Android), write your notification, and send. Delivery counts appear as soon as APNs and FCM respond.

SDK reference

UbriotNotify.register(opts)
Register a native push token with Ubriot. Returns a stable UbriotPushToken. Idempotent — safe to call on every launch.
UbriotNotify.identifyUser(userId, opts)
Link a device to a user ID in your system. Pass pushToken from register(). Call after login.

Need help?

Email hello@ubriot.dev. Enterprise customers get a dedicated Slack channel. Check the FAQ for common questions about builds, credentials, and OTA updates.