Build · Mobile Try-On
Dodaj virtual try-on do aplikacji na iOS lub Androida
W jednym zdaniu
Przechowuj klucz Photta API na swoim backendzie; wystaw endpoint proxy (/mobile/try-on), który przyjmuje zdjęcie produktu oraz mannequin ID, przekazuje je do /api/v1/tryon/apparel, zapisuje ID generacji przypisane do użytkownika i udostępnia endpoint statusu, który aplikacja mobilna odpytuje (polling) co 3 sekundy, aż obraz będzie gotowy. Telefon nigdy nie dowiaduje się o istnieniu klucza Photta.
- Credits: 5 credits w 2K · 6 credits w 4K
- Typowy czas: 1.5–4 min
- Przetwarzanie: asynchroniczne, polling
Każda liczba na tej stronie pochodzi z dokumentacji API Photta · sprawdzono
Twoje urządzenie nigdy nie komunikuje się bezpośrednio z Photta — łączy się z Twoim backendem, a Twój backend rozmawia z Photta. Ta granica chroni Twój klucz API przed wyciekiem z telefonu użytkownika, sprawia, że rate limity pozostają Twoją sprawą, a aplikacja bez problemu przechodzi weryfikację w każdym sklepie.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/tryon/apparel",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": True,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
},
)
data = res.json()["data"] # data["id"], data["status"]Jak to działa
Urządzenie, backend, Photta — trzy warstwy, jeden przepływ
Pięć konkretnych decyzji, które musisz podjąć przed pierwszym zgłoszeniem do App Store.
Krok 1
Trzymaj klucz na swoim serwerze
Nie dołączaj klucza Photta do pliku binarnego aplikacji, info.plist, AndroidManifest ani żadnego pliku środowiskowego czasu budowania — dekompilacja binarki jest trywialna i klucz wycieknie. Twój backend to jedyne miejsce, w którym powinien znajdować się klucz.
Krok 2
Zaprojektuj czysty endpoint proxy
Udostępnij /mobile/try-on dla swojej aplikacji. Uwierzytelniaj żądanie przy użyciu własnej sesji użytkownika — nie przekazuj surowych kluczy API przez proxy. Proxy wywołuje następnie Photta w imieniu uwierzytelnionego użytkownika.
Krok 3
Odzwierciedlaj status zadania Photta w swojej bazie danych
Gdy Photta zwróci ID generacji, wstaw wiersz do własnej tabeli zadań z kluczem user_id. Twoja aplikacja mobilna odpytuje TWÓJ /mobile/try-on/:id — a nie Photta — dzięki czemu rate limity skalują się zgodnie z TWOIM planem, a nie urządzeniem każdego użytkownika.
Krok 4
Cache'uj docelowy URL wyniku
Gdy Photta zgłosi completed, skopiuj output_url do swojego wiersza z zadaniem i opcjonalnie pobierz bajty do własnego CDN. Użytkownicy mobilni płacą za każdy MB — nie linkuj bezpośrednio do CDN Photta przez cały cykl wyświetlania PDP.
Krok 5
Obsługuj tryb offline bez błędów
Sieci mobilne zrywają połączenie w trakcie odpytywania. Pokaż stan „ponawianie próby” zamiast twardego błędu, ponawiaj żądania z wykorzystaniem exponential backoff i zapisuj ID zadania lokalnie, aby po zimnym starcie wznowić pracę w miejscu, w którym zakończyła się ostatnia sesja.
Trzy warstwy integracji
Kontrakt aplikacji, backend proxy, polling po stronie klienta — dokładnie taka separacja, jakiej potrzebujesz.
// Never ship your PHOTTA_API_KEY to the device. The mobile app
// calls YOUR API; your API calls Photta. Simple, safe, billable.
POST /mobile/try-on
{
"productImageUrl": "...",
"mannequinId": "...",
"poseId": "..."
}
// → returns { jobId } immediatelyconst res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.status// Store { id: data.id, user_id, status: "processing" } in your jobs table
// and return { jobId: data.id } to the device.
// App polls YOUR /mobile/try-on/:id — you poll Photta server-side
// and mirror status. This way rate limits are YOUR problem, not
// each device's, and you can add caching + analytics in one place.
async function pollJob(jobId: string) {
while (true) {
const { status, imageUrl } = await api.get(`/mobile/try-on/${jobId}`);
if (status === "completed") return imageUrl;
if (status === "failed") throw new Error("Try-on failed");
await sleep(3000);
}
}Pytania zadawane przez programistów
Wdrożenie funkcji mobilnej opartej na Photta
Czy mogę wywołać Photta API bezpośrednio z urządzenia?
Technicznie tak — ale musiałbyś umieścić swój klucz API wewnątrz pakietu aplikacji, co oznacza wysłanie klucza na każde urządzenie, które ją zainstaluje. Przekieruj ruch przez własny backend, aby klucz pozostał na serwerze, nad którym masz kontrolę.
Jak radzić sobie z wolnymi sieciami mobilnymi?
Dwie zasady. Po pierwsze: zlecaj zadanie z backendu, nie z urządzenia — z telefonu przesyłasz jedynie zdjęcie produktu do własnego API. Po drugie: odpytuj własny endpoint statusu w 3-sekundowych odstępach, stosując exponential backoff w razie niepowodzenia. Jeśli użytkownik przełączy karty lub straci zasięg, zapisz ID zadania w pamięci lokalnej, aby mógł kontynuować po powrocie.
Czy Photta obsługuje webhooki?
Nie. Polling to jedyny sygnał ukończenia, jaki oferuje API, dlatego utrzymaj pętlę workera — i wyślij server-sent event na telefon w momencie, gdy Twój własny backend zarejestruje zakończenie zadania.
Czy mogę używać Photta z React Native lub Flutterem?
Tak — po stronie JavaScript / Dart wywołujesz po prostu API własnego backendu. Żadne szczegóły implementacyjne Photta nie przenikają na zewnątrz. Aplikacje we Flutterze pobierają dane przez fetch z /mobile/try-on dokładnie tak samo, jak aplikacje w React Native czy natywnym SwiftUI / Jetpack Compose.
Czy zespół weryfikacyjny Apple zwraca uwagę na tę integrację?
Nie — ponieważ Twoja aplikacja nie wywołuje bezpośrednio Photta. Łączy się z Twoim własnym backendem z Twoim własnym uwierzytelnianiem. Z perspektywy Apple jesteś zwykłą aplikacją opartą na REST. To samo dotyczy Google Play i Huawei AppGallery.
Powiązane strony
Dokumentacja
Możliwości
API wirtualnego try-on dla odzieży
REST API, które nakłada odzież na manekiny AI. Asynchroniczne, generowanie w 1.5–4 minuty, 5 credits przy 2K, 6 przy 4K. Przykłady dla cURL, Node.js i Python.
CzytajSzybki start
Pierwszy obraz z Photta w mniej niż pięć minut.
Zarejestruj się, wygeneruj klucz API, wykonaj pierwsze wywołanie cURL, odpytuj aż do ukończenia, zapisz wynik. Pięć kroków opisanych od początku do końca.
CzytajJęzyki
Node.js walkthrough
Czytaj
Każda liczba na tej stronie pochodzi z dokumentacji API Photta · sprawdzono
Wdróż virtual try-on w najbliższym wydaniu aplikacji
Trzy cienkie warstwy, zerowy narzut SDK na urządzeniu. Pobierz klucz API i skonfiguruj proxy w jedno popołudnie.