{"id":586,"date":"2026-10-23T15:47:27","date_gmt":"2026-10-23T07:47:27","guid":{"rendered":"https:\/\/en.meishesdk.com\/blog\/?p=586"},"modified":"2026-10-23T15:47:28","modified_gmt":"2026-10-23T07:47:28","slug":"ar-face-props-for-ios-android-flutter-react-native","status":"publish","type":"post","link":"https:\/\/en.meishesdk.com\/blog\/586.html","title":{"rendered":"AR Face Props for iOS, Android, Flutter &amp; React Native"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">AR face props on iOS, Android, Flutter, and React Native come from one library: the same 2D and 3D sticker sets, anchored to detected facial features, tracked per frame, and resolved from the same packages on every target. Native teams link the engine directly; Flutter and React Native teams reach the identical prop stack through the short-video solution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Product Positioning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Face AR SDK&#8217;s prop and sticker capability runs on the cross-platform audio\/video processing engine the family shares, real-time with no preprocessing. iOS and Android integrate natively; the short-video solution carries the same props to Flutter and React Native teams. Prop packages are data \u2014 authored in the Asset Creation Platform, published through your channel, resolved identically on every build.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. What users get on each target<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Capability<\/th><th class=\"has-text-align-left\" data-align=\"left\">iOS and Android<\/th><th class=\"has-text-align-left\" data-align=\"left\">Flutter and React Native<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">Face-anchored 2D stickers<\/td><td class=\"has-text-align-left\" data-align=\"left\">Attached to detected features, tracking live<\/td><td class=\"has-text-align-left\" data-align=\"left\">The same anchoring through the hosted pipeline<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">3D prop sets<\/td><td class=\"has-text-align-left\" data-align=\"left\">Perspective-correct props following head turns<\/td><td class=\"has-text-align-left\" data-align=\"left\">The same 3D families, same behaviour<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Gesture triggers<\/td><td class=\"has-text-align-left\" data-align=\"left\">Wave-to-switch and raise-to-start interactions<\/td><td class=\"has-text-align-left\" data-align=\"left\">The same triggers at the framework layer<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Seasonal families<\/td><td class=\"has-text-align-left\" data-align=\"left\">Package publishes through your channel<\/td><td class=\"has-text-align-left\" data-align=\"left\">The same packages, same day<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The cross-framework path carries the full prop experience \u2014 a Flutter build offers the same sticker library as the native builds beside it, not a reduced selection.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469.png\" alt=\"AR Face Props for iOS, Android, Flutter &amp; React Native\" title=\"AR Face Props for iOS, Android, Flutter &amp; React Native\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"571\" src=\"https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469-1024x571.png\" alt=\"AR Face Props for iOS, Android, Flutter &amp; React Native\" alt=\"\" class=\"wp-image-587\" srcset=\"https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469-1024x571.png 1024w, https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469-300x167.png 300w, https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469-768x428.png 768w, https:\/\/en.meishesdk.com\/blog\/wp-content\/uploads\/2026\/10\/2026102307465469.png 1244w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3. How the integrations differ \u2014 and what does not<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The native path links the prop engine into your camera session: your app owns capture, the SDK anchors and renders props onto each frame. The cross-framework path routes the same engine through the short-video solution, which handles platform bridging \u2014 per-frame anchoring stays native, and only coarse commands like &#8220;attach this prop&#8221; cross into Dart or JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What never differs is the content:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One identifier \u2014\u00a0<code>prop.crown.festival.3d<\/code>\u00a0\u2014 resolves on iOS, Android, and through the Flutter and React Native integrations.<\/li>\n\n\n\n<li>One publish in the Asset Creation Platform reaches every build the same day.<\/li>\n\n\n\n<li>One verification pass covers a family across the target family.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The snippet below is schematic. Names and signatures are illustrative, not the shipped API.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Illustrative: a coarse command crosses the bridge; frames stay native.\nimport { EffectsView } from \"@meishe\/short-video\"; \/\/ placeholder name\n\n&lt;EffectsView\n  initialProp=\"prop.crown.festival.3d\"\n  onGesture={(g) =&gt; g.type === \"wave\" &amp;&amp; cycleProp()}\n\/&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Fitting props into a mixed-stack camera<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A native app adding a Flutter camera module<\/strong>\u00a0enables the same prop families on the new surface \u2014 the seasonal campaign runs in both with zero re-authoring.<\/li>\n\n\n\n<li><strong>A React Native prototype going production<\/strong>\u00a0keeps the sticker library it demoed with; promotion is integration detail, not content migration.<\/li>\n\n\n\n<li><strong>Parallel teams<\/strong>\u00a0author against one catalogue, so the prop experience stays consistent however many builds consume it.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Why teams choose Meishe<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Advantage<\/th><th class=\"has-text-align-left\" data-align=\"left\">What it means for your project<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">Self-developed engine<\/td><td class=\"has-text-align-left\" data-align=\"left\">The cross-platform audio\/video processing engine used across the product family, refined through years of shipping<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Real-time, no preprocessing<\/td><td class=\"has-text-align-left\" data-align=\"left\">Props render from the first camera frame, native or cross-framework<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">One package model<\/td><td class=\"has-text-align-left\" data-align=\"left\">Every build resolves the same prop identifiers<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2D and 3D families<\/td><td class=\"has-text-align-left\" data-align=\"left\">Both formats from the one library<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Authoring included<\/td><td class=\"has-text-align-left\" data-align=\"left\">Asset Creation Platform for designers; Special Effects Customization for produced families<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">6. What shipping teams ask first<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Which target ships first?<\/strong>\u00a0The one your roadmap weights most \u2014 the prop library carries to the others unchanged.<\/li>\n\n\n\n<li><strong>Do 3D props lag on the cross-framework path?<\/strong>\u00a0No \u2014 both paths resolve the same packages; anchoring and rendering behaviour is identical.<\/li>\n\n\n\n<li><strong>Who owns camera permissions?<\/strong>\u00a0Your app, on every target; the SDK renders once frames arrive.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The staffing symmetry deserves one more note: because the prop model is identical across targets, a designer moving between the iOS and Flutter projects changes codebases without changing content practices. The catalogue, the authoring platform, and the publish pipeline are the same surface \u2014 muscle memory transfers, and so does institutional knowledge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That consistency is invisible when it works and expensive when absent: teams that forked prop content per platform spend their seasons reconciling catalogues instead of shipping them. The one-library arrangement exists precisely so that seasons stay for shipping.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However the target list grows \u2014 a desktop client, a smart-hardware variant \u2014 the prop library arrives with it, complete, on day one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One library, four targets, zero content forks \u2014 the prop roadmap stays that simple as it grows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One more planning observation: prop campaigns stop being platform campaigns. A launch that would once have needed an iOS week, an Android week, and a framework follow-up is one publish and one verification pass \u2014 the team&#8217;s calendar frees for the creative work that differentiates the product in the first place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fewer platform weeks, more creative weeks \u2014 the arithmetic of one library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same reasoning applies to QA ownership: because verification is per family rather than per platform permutation, one reviewer covers the season. Review effort scales with content, not with the target list.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Put together, the four-target arrangement reads like a single-target one: one library, one calendar, one verification pass \u2014 multiplied across every build the product ships. That is the whole point, and the whole saving.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One library, four targets, zero forks \u2014 and every season arrives everywhere the same day.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And when a fifth target appears \u2014 a desktop client, a smart-hardware variant \u2014 it joins the same library the same week: integration work, never content work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However the build list grows \u2014 a fifth target, a hybrid module, a new client \u2014 the sticker library arrives complete on each new surface, and the roadmap keeps its single content truth.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Four targets today, whatever tomorrow \u2014 the library was built for the growth, and the growth was built into the library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The four-target story, in closing, is not about the targets \u2014 it is about the team that never has to choose between them. Ship where the users are; the library follows the product wherever it goes next.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can we start native and add Flutter later?<\/strong><br>Yes \u2014 the same prop packages resolve on the new target from day one; the content investment carries over untouched.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do gesture triggers work through React Native?<\/strong><br>Yes \u2014 gesture events arrive at the JavaScript layer as coarse events; detection itself runs natively on the frame stream.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How does QA verify props across four targets?<\/strong><br>Verify each family once per target family; because engine and packages are shared, differences surface as platform behaviour rather than prop differences.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can props run alongside beautification on the cross-framework path?<\/strong><br>Yes \u2014 the hosted pipeline runs the same stack, so a Flutter user can wear smoothing, a filter, and a 3D prop together.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AR face props on iOS, Android, Flutter, and React Native come from one library: the same 2D and 3D sticker sets, anchored to detected facial features, tracked per frame, and resolved from the same packages on every target. Native teams link the engine directly; Flutter and React Native teams reach the identical prop stack through [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":587,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[378,411,40,368,377,369,12],"class_list":["post-586","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-face-ar-sdk","tag-android","tag-ar-face-props","tag-face-ar-sdk","tag-flutter","tag-ios","tag-react-native","tag-video-editing"],"_links":{"self":[{"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/posts\/586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/comments?post=586"}],"version-history":[{"count":1,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/posts\/586\/revisions"}],"predecessor-version":[{"id":588,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/posts\/586\/revisions\/588"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/media\/587"}],"wp:attachment":[{"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/media?parent=586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/categories?post=586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/en.meishesdk.com\/blog\/wp-json\/wp\/v2\/tags?post=586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}