Byg · Mobil Try-On

Tilføj virtuel try-on til en iOS- eller Android-app

I én sætning

Behold Photta API-nøglen på din backend; eksponer et proxy-endpoint (/mobile/try-on), der modtager produktbilledet og mannequin-ID'et, videresender til /api/v1/tryon/apparel, gemmer det genererede ID på brugeren og udstiller et status-endpoint, som mobilappen poller hvert 3. sekund, indtil billedet er klar. Telefonen opdager aldrig, at Photta-nøglen eksisterer.

  • Credits: 5 credits ved 2K · 6 credits ved 4K
  • Typisk tid: 1.5–4 min
  • Behandling: async, polling

Hvert tal på denne side stammer fra Photta API-dokumentationen · tjekket

Din enhed taler aldrig direkte med Photta — den taler med din backend, og din backend taler med Photta. Det er netop denne adskillelse, der holder din API-nøgle væk fra brugerens telefon, gør dine rate limits til dit eget ansvar og sikrer, at din app kan godkendes i alle app stores.

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

Sådan virker det

Enhed, backend, Photta — tre lag, ét flow

Fem konkrete beslutninger, du skal træffe inden den første indsendelse til App Store.

  1. Trin 1

    Behold nøglen på din server

    Udrul ikke Photta-nøglen inde i din app-binære fil, info.plist, AndroidManifest eller nogen build-time env-fil — det er trivielt at dekompilere den binære fil, og nøglen vil blive lækket. Din backend er det eneste sted, nøglen må leve.

  2. Trin 2

    Design et rent proxy-endpoint

    Eksponer /mobile/try-on for din app. Godkend anmodningen med din egen brugersession — send ikke rå API-nøgler gennem proxyen. Proxyen kalder derefter Photta på vegne af den godkendte bruger.

  3. Trin 3

    Spejl Phottas jobstatus i din database

    Når Photta returnerer et generations-ID, indsættes en række i din egen jobtabel med user_id som nøgle. Din mobilapp poller DIT /mobile/try-on/:id — ikke Phottas — så rate limits skalerer med DIN plan og ikke den enkelte brugers enhed.

  4. Trin 4

    Cache resultatets URL

    Når Photta melder completed, kopieres output_url over i din job-række, og du kan eventuelt downloade rådataene til dit eget CDN. Mobilbrugere betaler pr. MB — undgå at hotlinke til Phottas CDN i hele levetiden for en PDP-visning.

  5. Trin 5

    Håndter offline-tilstand elegant

    Mobilnetværk afbrydes midt under polling. Vis en 'prøver igen'-tilstand frem for en hård fejl, forsøg igen med eksponentiel backoff, og gem job-ID'et lokalt, så en koldstart fortsætter, hvor den forrige session slap.

Integrationens tre lag

App-kontrakt, backend-proxy, klient-polling — præcis den afgrænsning, du har brug for.

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

Spørgsmål udviklere stiller

Udrul en Photta-drevet mobilfunktion

Kan jeg kalde Photta API'et direkte fra enheden?

Teknisk set ja — men så ville du være nødt til at distribuere din API-nøgle inde i app-bundlet, hvilket udleverer din nøgle til enhver enhed, der installerer appen. Rut gennem din egen backend, så nøglen forbliver på en server, du kontrollerer.

Hvordan håndterer jeg langsomme mobilnetværk?

To ting. For det første: afsend jobbet fra backenden, ikke enheden — du uploader blot et produktbillede fra telefonen til dit eget API. For det andet: poll dit eget status-endpoint med 3-sekunders intervaller og en eksponentiel backoff ved fejl. Hvis brugeren skifter fane eller mister forbindelsen, gemmes job-ID'et i local storage, så de kan genoptage, når de vender tilbage.

Understøtter Photta webhooks?

Nej. Polling er det eneste færdiggørelsessignal, API'et tilbyder, så behold worker-loopet — og send en server-sent event til telefonen i samme øjeblik, din egen backend registrerer, at jobbet er færdigt.

Kan jeg bruge Photta med React Native eller Flutter?

Ja — fra JavaScript- / Dart-siden kalder du blot dit eget backend-API. Ingen af Phottas specifikke detaljer siver igennem. Flutter-apps henter /mobile/try-on på nøjagtig samme måde som en React Native- eller indbygget SwiftUI- / Jetpack Compose-app.

Går Apples godkendelsesteam op i denne integration?

Nej — for din app kalder ikke Photta. Den kalder din egen backend med din egen godkendelse. Fra Apples perspektiv er du blot en helt almindelig REST-understøttet app. Det samme gælder for Google Play og Huawei AppGallery.

Udrul virtuel try-on i din næste app-udgivelse

Tre tynde lag, intet SDK-fodaftryk på enheden. Hent en API-nøgle og få proxyen koblet op på en eftermiddag.