تفاوت Android، iOS و وب
جدول واقعی قابلیتهای Kotlin و Flutter 0.2.1 و Web 0.2.0؛ هویت، کش، استور، بازیابی و تحویل.
وجود نام متد در facade فلاتر به معنی پیادهسازی آن روی هر backend نیست. این جدول مبنای نسخههای منتشرشده Flutter/Kotlin 0.2.1 و JS 0.2.0 است؛ برای نسخه دیگر source و lockfile را بررسی کنید.
| قابلیت | Kotlin / Flutter Android | Flutter iOS | Flutter Web | JavaScript مستقیم |
|---|---|---|---|---|
| مالک نشست | Kotlin بومی | Dart GoV2 + Keychain | فراهمکننده JS از طریق پل | client همان JS |
| پرداخت | Direct، بازار، مایکت | Direct | Web checkout | Web checkout |
| logIn با شناسه مشتری | دارد | دارد | ندارد | ندارد؛ Ticket/OTP |
| Ticket و OTP | ندارد | ندارد | دارد | دارد |
| current / placement / exact offering | دارد | دارد | دارد؛ exact از helper مجموعه | دارد |
| combined attribute/offering sync | دارد؛ ۵/۶۰ | دارد؛ ۵/۶۰ | ندارد | دارد؛ ۵/۶۰ |
| چهار سیاست CustomerInfo | دارد | دارد | ورودی عبور نمیکند | دارد |
| پیشفرض CustomerInfo | cachedOrFetched | cachedOrFetched | FETCH_CURRENT فراهمکننده | FETCH_CURRENT |
| history و purchaseUpdates همبسته | دارد | ندارد | ندارد | ندارد |
| sync/restore استور | دارد | فقط Direct delivery؛ بدون StoreKit | ندارد | ندارد |
| delivery handler | دارد | ندارد | ندارد | دارد، با API مخصوص JS |
| sync/confirm مصرفی | دارد | Direct دستی | ندارد | Direct |
| checkout status / payment-return polling | API عمومی ندارد | ندارد | دارد | دارد |
| isPaymentUrlAllowed / setNetworkEnabled | دارد | دارد | ندارد | سیاست/تنظیمات وب مستقل |
| نوشتن reserved $ip | دارد | validator رد میکند | ندارد | ندارد |
انتخاب درست معماری
روی Android، Kotlin مالک خرید، کش و زمانبندی بازیابی است؛ پل فلاتر یک pipeline دوم نمیسازد. در iOS مسیر Direct در Dart اجرا میشود و ورودیهای استور قابلیت StoreKit ایجاد نمیکنند. در وب، JS مالک توکن و browser storage است؛ دستکاری snapshot فلاتر یا ساخت client دوم، روش رفع unsupportedOperation نیست.
تفاوتهای مهم کش
Android کش CustomerInfo را پنج دقیقه foreground/۲۵ ساعت background تازه میداند؛ iOS فعلی پنج دقیقه. JS پنج دقیقه visible/۲۵ ساعت hidden دارد، اما Flutter Web این policyها را forward نمیکند. native کش تأییدشده ماندگار دارد؛ snapshot مشتری JS memory-only است، حتی اگر refresh token در IndexedDB ذخیره شود.
تفاوت تلاش خرید
Android 0.2.1 تاریخچه رمزشده تلاش و نتیجه همبسته با idempotencyKey را حتی پس از restart میدهد و Direct جدید را با سرویس سازگار پیگیری میکند. iOS API تاریخچه ندارد و key درخواست Direct به سرور ارسال نمیشود. Web به checkout ID و status endpoint تکیه میکند. این سه ضمانت را یکی فرض نکنید.