Bangun · Try-On Seluler

Tambahkan virtual try-on ke aplikasi iOS atau Android

Ringkasan singkat

Simpan Photta API key di backend Anda; sediakan endpoint proxy (/mobile/try-on) yang menerima gambar produk dan ID manekin, meneruskannya ke /api/v1/tryon/apparel, menyimpan ID pembuatan berdasarkan pengguna, dan menyediakan endpoint status yang di-polling oleh aplikasi seluler setiap 3 detik hingga gambar siap. Ponsel tidak akan pernah mengetahui keberadaan key Photta.

  • Credits: 5 credits pada 2K · 6 credits pada 4K
  • Waktu umum: 1.5–4 min
  • Pemrosesan: async, polling

Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa

Perangkat Anda tidak pernah berkomunikasi langsung dengan Photta — perangkat berbicara ke backend Anda, dan backend Anda berbicara ke Photta. Batasan itulah yang menjaga API key Anda tidak berada di ponsel pengguna, menjadikan rate limit sebagai urusan Anda sendiri, dan membuat aplikasi Anda lolos review di setiap toko aplikasi.

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')

Cara kerja

Perangkat, backend, Photta — tiga tier, satu alur

Lima keputusan konkret yang perlu Anda buat sebelum pengajuan pertama ke App Store.

  1. Langkah 1

    Simpan key di server Anda

    Jangan sertakan key Photta di dalam biner aplikasi Anda, info.plist, AndroidManifest, atau file env build-time apa pun — mendekompilasi biner itu sangat mudah dan key akan bocor. Backend Anda adalah satu-satunya tempat key tersebut berada.

  2. Langkah 2

    Rancang endpoint proxy yang rapi

    Sediakan /mobile/try-on untuk aplikasi Anda. Autentikasi request dengan sesi pengguna Anda sendiri — jangan meneruskan API key mentah melalui proxy. Proxy kemudian memanggil Photta atas nama pengguna yang terautentikasi.

  3. Langkah 3

    Mirror status job Photta di database Anda

    Saat Photta mengembalikan ID pembuatan, masukkan baris baru ke dalam tabel jobs Anda sendiri dengan kunci user_id. Aplikasi seluler Anda melakukan polling ke /mobile/try-on/:id MILIK ANDA — bukan milik Photta — sehingga rate limit berskala mengikuti paket ANDA, bukan perangkat masing-masing pengguna.

  4. Langkah 4

    Cache URL hasil

    Saat Photta melaporkan completed, salin output_url ke baris jobs Anda dan secara opsional unduh byte-nya ke CDN Anda sendiri. Pengguna seluler membayar per MB — jangan melakukan hot-link ke CDN Photta selama masa tayang impresi PDP.

  5. Langkah 5

    Tangani kondisi offline dengan baik

    Jaringan seluler sering terputus di tengah-tengah polling. Tampilkan status 'mencoba lagi' alih-alih hard error, lakukan percobaan ulang dengan exponential backoff, dan simpan ID job secara lokal sehingga proses cold-start dapat melanjutkan sesi terakhir yang terputus.

Tiga lapisan integrasi

Kontrak aplikasi, proxy backend, polling sisi klien — batasan tepat yang Anda butuhkan.

// 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 } immediately
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.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);
  }
}

Pertanyaan umum developer

Merilis fitur seluler bertenaga Photta

Bisakah saya memanggil Photta API langsung dari perangkat?

Secara teknis bisa — tetapi Anda harus menyertakan API key di dalam bundle aplikasi, yang berarti mendistribusikan key Anda ke setiap perangkat yang memasang aplikasi tersebut. Rutekan melalui backend Anda sendiri agar key tetap berada di server yang Anda kendalikan.

Bagaimana cara menangani jaringan seluler yang lambat?

Dua hal. Pertama: kirimkan job dari backend, bukan dari perangkat — Anda hanya perlu mengunggah gambar produk dari ponsel ke API Anda sendiri. Kedua: lakukan polling ke endpoint status Anda sendiri dengan interval 3 detik dan exponential backoff jika terjadi kegagalan. Jika pengguna berpindah tab atau kehilangan sinyal, simpan ID job di penyimpanan lokal agar mereka dapat melanjutkannya saat kembali.

Apakah Photta mendukung webhook?

Tidak. Polling adalah satu-satunya sinyal penyelesaian yang disediakan API, jadi pertahankan loop worker — dan kirimkan server-sent event ke ponsel begitu backend Anda mendeteksi job telah selesai.

Bisakah saya menggunakan Photta dengan React Native atau Flutter?

Bisa — dari sisi JavaScript / Dart, Anda hanya memanggil API backend Anda sendiri. Tidak ada detail teknis spesifik Photta yang bocor ke klien. Aplikasi Flutter melakukan fetch ke /mobile/try-on dengan cara yang sama persis seperti yang dilakukan aplikasi React Native atau native SwiftUI / Jetpack Compose.

Apakah tim review Apple mempermasalahkan integrasi ini?

Tidak — karena aplikasi Anda tidak memanggil Photta secara langsung. Aplikasi Anda memanggil backend Anda sendiri dengan autentikasi Anda sendiri. Dari sudut pandang Apple, aplikasi Anda adalah aplikasi standar berbasis REST. Hal yang sama berlaku untuk Google Play dan Huawei AppGallery.

Rilis virtual try-on di versi rilis aplikasi Anda berikutnya

Tiga lapisan tipis, tanpa jejak SDK sama sekali di perangkat. Ambil API key dan hubungkan proxy-nya hanya dalam waktu satu siang.