Rakenna · Mobiili-try-on
Lisää virtuaalinen try-on iOS- tai Android-sovellukseen
Yhdellä lauseella
Pidä Photta API-avain taustajärjestelmässäsi; tarjoa proxy-endpoint (/mobile/try-on), joka vastaanottaa tuotekuvan ja mannequin_id:n, välittää ne osoitteeseen /api/v1/tryon/apparel, tallentaa luontitunnisteen (generation ID) käyttäjälle ja tarjoaa status-endpointin, jota mobiilisovellus pollaa 3 sekunnin välein, kunnes kuva on valmis. Puhelin ei koskaan saa tietää Photta-avaimen olemassaolosta.
- Credits: 5 credits resoluutiolla 2K · 6 credits resoluutiolla 4K
- Tyypillinen kesto: 1.5–4 min
- Käsittely: asynkroninen, polling
Jokainen luku tällä sivulla on peräisin Photta-rajapinnan dokumentaatiosta · tarkistettu
Laitteesi ei koskaan kommunikoi suoraan Phottaan — se puhuu taustajärjestelmällesi, ja taustajärjestelmäsi puhuu Phottalle. Tämä rajaus pitää API-avaimesi poissa käyttäjän puhelimesta, rate limitit omana huolenasi ja sovelluksesi hyväksyttävissä kaikissa sovelluskaupoissa.
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"]Miten se toimii
Laite, taustajärjestelmä, Photta — kolme tasoa, yksi työnkulku
Viisi konkreettista päätöstä, jotka sinun on tehtävä ennen ensimmäistä App Store -julkaisua.
Vaihe 1
Pidä avain palvelimellasi
Älä toimita Photta-avainta sovellusbinäärissä, info.plist-tiedostossa, AndroidManifestissa tai missään käännösaikaisessa env-tiedostossa — binäärin purkaminen on triviaalia ja avain vuotaa. Taustajärjestelmäsi on ainoa paikka, jossa avain saa olla.
Vaihe 2
Suunnittele siisti proxy-endpoint
Tarjoa /mobile/try-on sovelluksellesi. Autentikoi pyyntö omalla käyttäjäistunnollasi — älä välitä raakoja API-avaimia proxyn läpi. Proxy kutsuu sitten Phottaa autentikoidun käyttäjän puolesta.
Vaihe 3
Peilaa Phottan työn tila tietokannassasi
Kun Photta palauttaa luontitunnisteen (generation ID), lisää tietokantasi jobs-tauluun rivi, jonka avaimena on user_id. Mobiilisovelluksesi pollaa SINUN endpointtiasi /mobile/try-on/:id — ei Phottan — joten rate limitit skaalautuvat SINUN tilauksesi, eivät jokaisen käyttäjän laitteen mukaan.
Vaihe 4
Välimuistita tuloksen URL
Kun Photta raportoi completed, kopioi output_url jobs-rivillesi ja valinnaisesti lataa tavut omaan CDN-verkkoosi. Mobiilikäyttäjät maksavat megatavuittain — älä hotlinkkaa Phottan CDN:ää PDP-näyttökerran koko elinkaaren ajaksi.
Vaihe 5
Käsittele offline-tilat hallitusti
Mobiiliverkot katkeavat kesken pollingin. Näytä 'yritetään uudelleen' -tila kovan virheen sijaan, yritä uudelleen eksponentiaalisella perääntymisellä ja säilytä työtunniste paikallisesti, jotta kylmäkäynnistys jatkaa siitä, mihin edellinen istunto jäi.
Integraation kolme kerrosta
Sovelluskontrahti, taustajärjestelmän proxy, asiakaspään polling — juuri se rajaus, jonka tarvitset.
// 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);
}
}Kehittäjien usein kysymää
Phottaa hyödyntävän mobiiliominaisuuden julkaiseminen
Voinko kutsua Photta APIa suoraan laitteelta?
Teknisesti kyllä — mutta sinun pitäisi sisällyttää API-avaimesi sovelluspakettiin, mikä toimittaa avaimesi jokaiseen laitteeseen, joka asentaa sovelluksen. Reititä oman taustajärjestelmäsi kautta, jotta avain pysyy hallitsemallasi palvelimella.
Miten käsittelen hitaat mobiiliverkot?
Kaksi asiaa. Yksi: lähetä työ taustajärjestelmästä, älä laitteesta — lataat vain tuotekuvan puhelimesta omaan APIisi. Kaksi: pollaa omaa status-endpointtiasi 3 sekunnin välein ja käytä virhetilanteissa eksponentiaalista perääntymistä. Jos käyttäjä vaihtaa välilehteä tai menettää verkkoyhteyden, tallenna työtunniste paikalliseen muistiin, jotta käsittely voi jatkua hänen palatessaan.
Tukeeko Photta webhookeja?
Ei. Polling on ainoa valmistumissignaali, jonka API tarjoaa, joten pidä worker-silmukka käynnissä — ja lähetä palvelimen lähettämä tapahtuma (server-sent event) puhelimeen heti, kun oma taustajärjestelmäsi havaitsee työn valmistuneen.
Voinko käyttää Phottaa React Nativen tai Flutterin kanssa?
Kyllä — JavaScript- tai Dart-puolelta kutsut vain omaa tausta-APIasi. Mikään Phottan sisäisistä yksityiskohdista ei vuoda läpi. Flutter-sovellukset tekevät fetch-pyynnön osoitteeseen /mobile/try-on samalla tavalla kuin React Native- tai natiivi SwiftUI- / Jetpack Compose -sovellus.
Välittääkö Applen tarkistustiimi tästä integraatiosta?
Ei — koska sovelluksesi ei kutsu Phottaa. Se kutsuu omaa taustajärjestelmääsi omalla autentikaatiollasi. Applen näkökulmasta olet tavallinen REST-taustajärjestelmää käyttävä sovellus. Sama koskee Google Playta ja Huawei AppGallerya.
Liittyvät sivut
Referenssi
Ominaisuudet
Virtuaalinen try-on API vaatteille
REST API, joka asettaa vaatteet tekoälymallinukkejen päälle. Asynkroninen, 1.5–4 minuutin generointi, 5 credits resoluutiolla 2K, 6 resoluutiolla 4K. cURL-, Node.js- ja Python-esimerkit.
LuePikaopas
Ensimmäinen Photta-kuva alle viidessä minuutissa.
Rekisteröidy, luo API-avain, suorita ensimmäinen cURL-kutsusi, tee pollingia valmistumiseen asti ja tallenna tulos. Viisi vaihetta, dokumentoitu alusta loppuun.
LueKielet
Node.js walkthrough
Lue
Jokainen luku tällä sivulla on peräisin Photta-rajapinnan dokumentaatiosta · tarkistettu
Julkaise virtuaalinen try-on seuraavassa sovellusversiossasi
Kolme ohutta kerrosta, nolla SDK-jalanjälkeä laitteessa. Ota API-avain ja kytke proxy toimintaan yhdessä iltapäivässä.