Geliştirme · Mobil Try-On
Bir iOS veya Android uygulamasına sanal try-on ekleyin
Tek cümlede
Photta API anahtarını backend'inizde tutun; ürün görselini ve manken kimliğini kabul eden, /api/v1/tryon/apparel adresine ileten, üretim kimliğini kullanıcıyla eşleştirerek saklayan ve mobil uygulamanın görsel hazır olana kadar her 3 saniyede bir polling yaptığı bir durum endpoint'i sunan bir proxy endpoint (/mobile/try-on) açın. Telefon, Photta anahtarının varlığından asla haberdar olmaz.
- Credits: 2K'da 5 credits · 4K'da 6 credits
- Tipik süre: 1.5–4 min
- İşleme: asenkron, polling
Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi
Cihazınız asla doğrudan Photta ile konuşmaz — backend'inizle konuşur ve backend'iniz Photta ile konuşur. API anahtarınızı kullanıcının telefonundan uzak tutan, rate limit'lerinizi kendi kontrolünüzde bırakan ve uygulamanızın tüm mağazalarda onaylanabilir olmasını sağlayan tam olarak bu sınırdır.
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"]Nasıl çalışır
Cihaz, backend, Photta — üç katman, tek akış
İlk App Store gönderiminden önce vermeniz gereken beş somut karar.
Adım 1
Anahtarı sunucunuzda tutun
Photta anahtarını uygulama ikiliniz, info.plist, AndroidManifest veya derleme zamanı ortam dosyaları içine eklemeyin — ikiliyi kaynak koda dönüştürmek son derece kolaydır ve anahtar sızdırılacaktır. Backend'iniz, anahtarın barındığı tek yerdir.
Adım 2
Temiz bir proxy endpoint tasarlayın
Uygulamanıza /mobile/try-on endpoint'ini açın. İsteği kendi kullanıcı oturumunuzla doğrulayın — proxy üzerinden ham API anahtarları iletmeyin. Ardından proxy, kimliği doğrulanmış kullanıcı adına Photta'yı çağırır.
Adım 3
Photta'nın iş durumunu veritabanınıza yansıtın
Photta bir üretim kimliği döndürdüğünde, kendi jobs tablonuza user_id anahtarlı bir satır ekleyin. Mobil uygulamanız Photta'nınkini değil, KENDİ /mobile/try-on/:id endpoint'inizi poll eder; böylece rate limit'ler her kullanıcının cihazına göre değil, SİZİN planınıza göre ölçeklenir.
Adım 4
Sonuç URL'sini önbelleğe alın
Photta completed bildirdiğinde, output_url değerini jobs satırınıza kopyalayın ve isteğe bağlı olarak baytları kendi CDN'inize indirin. Mobil kullanıcılar MB başına ödeme yapar — bir PDP gösteriminin tüm ömrü boyunca Photta CDN'ine doğrudan hot-link vermeyin.
Adım 5
Çevrimdışı durumları sorunsuzca yönetin
Mobil ağlar polling sırasında kopabilir. Kesin bir hata yerine 'yeniden deneniyor' durumu gösterin, üstel geri çekilme (exponential backoff) ile yeniden deneyin ve iş kimliğini yerel olarak saklayın, böylece uygulama sıfırdan başladığında son oturumun kaldığı yerden devam edebilir.
Entegrasyonun üç katmanı
Uygulama sözleşmesi, backend proxy, istemci tarafı polling — tam olarak ihtiyacınız olan sınır.
// 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);
}
}Geliştiricilerin sıkça sorduğu sorular
Photta destekli bir mobil özelliği yayına alma
Photta API'sini doğrudan cihazdan çağırabilir miyim?
Teknik olarak evet — ancak API anahtarınızı uygulama paketinin içine koymanız gerekir, bu da anahtarınızı uygulamayı yükleyen her cihaza göndermek anlamına gelir. Anahtarın kontrol ettiğiniz bir sunucuda kalması için yönlendirmeyi kendi backend'iniz üzerinden yapın.
Yavaş mobil ağları nasıl yönetirim?
İki adımla. Bir: işi cihazdan değil, backend'den gönderin — telefondan yalnızca kendi API'nize bir ürün görseli yüklüyorsunuz. İki: kendi durum endpoint'inizi 3 saniyelik aralıklarla ve başarısızlık durumunda üstel geri çekilme ile poll edin. Kullanıcı sekmeyi değiştirirse veya sinyali kaybederse, iş kimliğini yerel depolamada saklayın, böylece geri döndüğünde devam edebilir.
Photta webhook'ları destekliyor mu?
Hayır. Polling, API'nin sunduğu tek tamamlanma sinyalidir; bu nedenle worker döngüsünü koruyun ve kendi backend'iniz işin bittiğini gördüğü anda telefona bir server-sent event gönderin.
Photta'yı React Native veya Flutter ile kullanabilir miyim?
Evet — JavaScript / Dart tarafından bakıldığında yalnızca kendi backend API'nizi çağırırsınız. Photta'ya özgü hiçbir detay dışarı sızmaz. Flutter uygulamaları, bir React Native veya yerel SwiftUI / Jetpack Compose uygulamasının yaptığı gibi /mobile/try-on endpoint'inden fetch işlemi yapar.
Apple'ın inceleme ekibi bu entegrasyonu önemser mi?
Hayır — çünkü uygulamanız Photta'yı çağırmaz. Kendi kimlik doğrulamanızla kendi backend'inizi çağırır. Apple'ın bakış açısından siz normal bir REST tabanlı uygulamasınız. Aynı durum Google Play ve Huawei AppGallery için de geçerlidir.
İlgili sayfalar
Referans
Yetenekler
Sanal try-on API'si giyim için
Giysileri yapay zeka mankenlerine yerleştiren REST API. Asenkron, 1.5–4 dakika oluşturma süresi, 2K için 5 credits, 4K için 6 credits. cURL, Node.js ve Python örnekleri.
OkuHızlı başlangıç
Beş dakikadan kısa sürede ilk Photta görseli.
Kayıt olun, bir API anahtarı oluşturun, ilk cURL çağrınızı çalıştırın, tamamlanana kadar yoklayın, sonucu kalıcı hale getirin. Beş adım, uçtan uca belgelenmiş.
OkuDiller
Node.js walkthrough
Oku
Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi
Bir sonraki uygulama sürümünüzde sanal try-on özelliğini yayına alın
Üç ince katman, cihazda sıfır SDK ayak izi. Bir API anahtarı alın ve proxy bağlantısını bir öğleden sonrada kurun.