Все нативные функции. Один SDK.

Всего 71, а 61 работают на настоящем телефоне в демо-приложении.

  • Пуш-уведомленияНовое
  • Встроенные покупки
  • Нативные переходы
  • Модальные панелиНовое
  • Вход с Face ID
  • QR-сканерНовое
  • Меню «Поделиться»Новое
  • Вход с AppleНовое
  • Текущая геопозицияНовое
  • Выбор фотоНовое
  • Прямые ссылкиНовое
  • СчётчикНовое
  • Входящий контентНовое
  • Запомнить входНовое
  • КонтактыНовое
  • Данные о здоровьеНовое
  • АудиоплеерНовое
  • ДиктофонНовое
  • Выбор даты и времениНовое
  • Запрос оценкиНовое
  • Запрос на отслеживаниеНовое
  • NFC-сканерНовое

Справка и рабочее демо для каждой функции.

С типизацией и документацией, одинаковые на iOS и Android. Вызывайте из привычного JavaScript.

Камера и медиа

Снимайте фото, выбирайте из галереи, записывайте аудио.

Воспроизведение аудио и видео

Воспроизводите медиа с системными кнопками управления и аудио в фоне.

Биометрический вход

Вход через Face ID или по отпечатку пальца в вашей системе авторизации.

Запомнить вход

Сохраняйте вход между сеансами с помощью учётных данных на устройстве.

Встроенные покупки

Продавайте цифровые товары в обоих магазинах. Проверяйте чеки на сервере.

Пуш-уведомления

Адресные пуш-уведомления с вашего бэкенда через OneSignal.

Геолокация

Получайте геопозицию с точностью самого устройства.

Разрешения во время работы

Запрашивайте и проверяйте разрешения без лишних помех.

Прямые ссылки

Ссылки открывают приложение — или магазин, затем приложение.

Системный обмен

Системное меню «Поделиться»: текст, ссылки, изображения, файлы.

Нативный интерфейс и отклик

Баннеры, экраны загрузки и нативные элементы из JavaScript.

Устройство, цикл работы

Платформа, версия приложения, события перехода в фон и обратно.

Каждая публикация обновляет все установленные приложения.

Веб, iOS, Android: все используют последнюю публикацию, даже те, кто никогда не обновляет приложение.

Раньше: выпускать каждое изменение трижды и ждать проверки. С BDK публикуете один раз.

Новый значок или нативная функция требуют сборки для магазина.

Как это видит App Review

Смотрите, как ИИ всё подключает.

Выберите свой инструмент. Вот всё подключение: справка, которую он читает, файлы, которые пишет, и ответ телефона.

acme-storefront
PreviewCode
Publish

Отправьте с сервера пуш-уведомление, открывающее пост по ссылке, используя ключи из переменных среды

Чтение server/onesignal-push
server/notifications/sendReply.ts+12

Отправьте прямую ссылку с сервера, используя ключи из переменных среды

Пуш-уведомление отправляется только с сервера, использует ключи из переменных среды и открывает пост 42.

Ask Lovable...
Build
acme-storefront.lovable.app
server/notifications/sendReply.ts+12
1import { sendPushNotification } from "@thebdk/native/server/onesignal";2 3const result = await sendPushNotification({4  message: "New reply on your post",5  title: "Inbox",6  subtitle: "From @jess",7  imageUrl: "https://cdn.example.com/preview.png",8  onLoadUrl: "https://app.example.com/posts/42",9  urlParams: [{ key: "ref", value: "push" }],10  data: { postId: 42, kind: "reply" },11  subscriptionIds: ["a1b2c3d4-1111-2222-3333-444455556666"]12});
Полный запрос
Подключите @thebdk/native к этому приложению, чтобы камера и Face ID работали, когда опубликованный сайт запущен в нативной оболочке BDK, а обычное веб-приложение продолжало работать в браузере.

Сначала прочитайте https://docs.thebdk.com/llms-full.txt и страницу каждой добавляемой функции. Используйте лишь описанные там имена вспомогательных функций, событий и ключи параметров. Не выдумывайте API.

Затем:
1. Добавьте пакет @thebdk/native.
2. Создайте один общий клиент в src/lib/bdk.ts с безопасным для браузера импортом:
   import { createBdkNative } from "@thebdk/native/browser";
   export const bdk = createBdkNative();
3. Создайте функции только с типизированными функциями в пространствах имён: bdk.media.*, bdk.ui.*,
   bdk.navigation.*, bdk.iap.*, bdk.auth.*, bdk.location.*, bdk.device.*, bdk.share.*,
   bdk.permissions.*.
4. Подпишитесь через bdk.on(event, cb) ДО любого интерактивного вызова. Результат
   приходит событием, а не возвращённым промисом.
5. В браузере вызов не выполняется: он завершается с triggered: false. Проверьте
   !result.triggered и сохраните рабочий веб-вариант для превью Lovable и веб-сборки.
   Не называйте это пропуском или not_native и не ждите
   нативного события в веб-интерфейсе.
6. Всё из @thebdk/native/server/* — только для бэкенда. Читайте учётные данные из переменных
   среды. Никогда не добавляйте ключи или серверные импорты в клиентский код.

Не заявляйте, что создали приложения iOS или Android, обернули сайт, подписали сборки, отправили их в магазин или проверили нативную работу в превью.

В конце покажите изменённые файлы, добавленный веб-вариант и дальнейшие шаги: опубликовать приложение по его URL, подключить URL на thebdk.com для сборки и подписи iOS и Android в BDK, затем протестировать нативные функции в приложении, собранном BDK.

Работает в приложении, собранном BDK

Добавляет камеру и Face ID. Веб-превью продолжает работать с веб-вариантом.

  • Один общий клиент — npm install @thebdk/native, один импорт, остальное не меняется.
  • Результаты приходят событиями. Запрос велит агенту подписаться через bdk.on(…) до вызова.
  • Работает и в браузере. Вне приложения вызовы не выполняются, и сайт продолжает работать.

Нет исходного кода? Ничего не нужно устанавливать. Подключите URL приложения в BDK Native — сборки будут такими же.

Создать приложение

Машиночитаемая справка: llms.txt — файл, который получает агент. Как используют агенты →

Три шага. Без нового стека.

  1. 1

    Установите SDK — или обойдитесь без него

    Есть исходный код? npm install @thebdk/native — одна зависимость, с полной типизацией. Нет кода? Нечего устанавливать. Шаг 3 — вся работа.

  2. 2

    Вызывайте нативные функции, где нужны

    Камера, биометрия, покупки, пуш — из вашего JavaScript. Одна сборка работает и во вкладке браузера, и после установки из App Store.

  3. 3

    Подключите URL. Получите сборки для магазинов.

    Вставьте URL в BDK Native. BDK собирает и подписывает оба приложения. Затем каждая публикация обновляет приложение на каждом телефоне.

app.ts
import { createBdkNative } from "@thebdk/native/browser";

const bdk = createBdkNative();
await bdk.ready();

// Results arrive on events — subscribe, then call.
bdk.on("photoCaptured", (photo) => upload(photo.fileUrl));
await bdk.media.capturePhoto();

// Native UI, one line.
await bdk.ui.showBanner({
  title: "Saved",
  description: "Photo uploaded."
});

Вот и всё подключение. Полная справка — гид. Каждую функцию можно запустить в живое демо.

Подробные ответы.

Apple не отклонит это как сайт в оболочке?

Apple отклоняет приложения, которые лишь показывают сайт. Пуш-уведомления, Face ID, покупки и обмен добавляют функции приложения. Никто не может обещать одобрения. живое демо — приложение, собранное BDK. Оцените сами.

Мгновенные обновления не нарушают правила магазинов?

Нет. Приложение показывает ваш работающий сайт. Публикация сайта — нормальная работа веб-приложений, а не уловка с внедрением кода. Проверка магазина нужна при изменениях нативной части: значка, прав или среды. Для них BDK даёт новую подписанную сборку для отправки на проверку.

Что такое BDK?

Нативная среда iOS и Android показывает ваше работающее веб-приложение на весь экран в настоящем приложении из магазина. Типизированный JavaScript SDK, @thebdk/native, связывает код с устройством: камера, биометрия, покупки, пуш. BDK собирает и подписывает готовое для магазина приложение. Вы отправляете его из своих аккаунтов разработчика с пошаговой помощью. Веб-приложение остаётся обычным веб-приложением на вашем хостинге.

Нужно менять веб-приложение?

Нет. Оно работает как есть. Добавьте @thebdk/native лишь там, где нужны нативные функции. Остальное не меняется, та же сборка обслуживает обычный сайт.

Чем это отличается от PWA или Capacitor?

PWA нельзя разместить в App Store или продавать через встроенные покупки. Capacitor даёт вам нативные проекты: сборка, подпись и пересборки навсегда остаются вашей задачей. Средой BDK управляет BDK: сборка, подпись и изменения платформ — его забота.

Всё это — в вашем приложении.