روی وب همه چیز ساده است: افزونه کیف پول در همان مرورگر نشسته، دکمه اتصال را می زنید و تمام. روی موبایل، اپ شما و کیف پول کاربر دو برنامه جدا هستند که حق ندارند مستقیم به حافظه هم دست بزنند. تمام سختی برنامه نویسی سولانا روی موبایل از همین یک جمله می آید.
پس بیایید ببینیم راه حل واقعی چیست، کجا کار می کند و کجا اصلا وجود ندارد.
مسئله اصلی: کلید هیچ وقت نباید به اپ شما برسد
قاعده اول و غیرقابل مذاکره: کلید خصوصی کاربر نباید وارد برنامه شما شود. نه در حافظه، نه در فایل تنظیمات، نه به صورت موقت.
کاری که اپ شما می کند این است: تراکنش را می سازد و برای امضا به کیف پول می فرستد. کیف پول به کاربر نشان می دهد چه چیزی قرار است امضا شود، کاربر تایید می کند، و امضا برمی گردد. اپ شما فقط تراکنش امضاشده را به شبکه می فرستد.
هر آموزشی که به شما بگوید عبارت بازیابی را از کاربر بگیرید و در اپ نگه دارید، آموزش نیست؛ دستورالعمل ساخت بدافزار است.
آداپتور کیف پول موبایل، و محدودیتی که کسی نمی گوید
پروتکل استانداردی برای همین گفت و گو بین دو اپ وجود دارد و اسمش آداپتور کیف پول موبایل است. کتابخانه هایش برای اندروید بومی، ری اکت نیتیو و وب موبایل آماده است و کار را واقعا ساده می کند.
حالا آن چیزی که در متن های فارسی پیدا نمی کنید: این پروتکل روی آی او اس کار نمی کند. مستندات رسمی سولانا موبایل صریح می گوید که آداپتور با آی او اس ناسازگار است و در هیچ کدام از حالت های اپ و مرورگر روی آن پشتیبانی نمی شود. روی اندروید هم فقط کروم پشتیبانی می کند و سافاری و فایرفاکس و بریو نه.
یعنی اگر می خواهید اپ آی او اس بسازید، باید سراغ لینک های عمیق و روش های اختصاصی هر کیف پول بروید. این تصمیم معماری است و باید روز اول گرفته شود، نه بعد از نوشتن نیمی از برنامه.
معماری واقعی یک اپ سولانا
سه تکه دارد و هیچ کدام جای دیگری را نمی گیرد.
تکه اول اپ شماست که رابط کاربری و منطق را دارد. تکه دوم یک ارائه دهنده گره است که اپ از طریقش با شبکه حرف می زند. تکه سوم، اگر منطق روی زنجیره داشته باشید، برنامه ای است که خودتان روی سولانا مستقر کرده اید. خیلی از اپ های موبایل اصلا تکه سوم را ندارند و فقط انتقال و خواندن موجودی انجام می دهند؛ برای شروع همین کافی است.
اگر هنوز مفاهیم پایه مثل مدل حساب را جا نینداخته اید، مسیر یادگیری سولانا از پایه را اول ببینید. ساختن اپ موبایل بدون فهم مدل حساب، تبدیل می شود به کپی کردن نمونه کد و امیدواری.
چهار اشتباهی که تقریبا همه مرتکب می شوند
- گذاشتن کلید ارائه دهنده گره در خود اپ. هر کسی می تواند فایل اپ را باز کند و آن را بردارد. این کلید باید پشت سرویس خودتان باشد.
- فرض اینکه تراکنش ارسال شده یعنی تراکنش موفق. روی سولانا شکست خوردن تراکنش یک حالت عادی است و رابط کاربری باید برایش طراحی شده باشد، نه اینکه با پیام خطای عمومی رهایش کند.
- نادیده گرفتن حداقل موجودی حساب ها. کاربری که موجودی اش دقیقا به اندازه مبلغ انتقال است، تراکنشش رد می شود و دلیلش را نمی فهمد مگر شما توضیح بدهید.
- تست فقط روی شبکه آزمایشی. رفتار شبکه اصلی در ازدحام کاملا فرق می کند و اپی که فقط آنجا تست شده، اولین روز شلوغ را رد نمی کند.
مورد دوم مهم ترینشان است. سرعت نهایی شدن تراکنش روی این شبکه در حال تغییر است و تغییرات پیش روی سازوکار نهایی شدن مستقیما روی چیزی اثر می گذارد که در اپ به کاربر نشان می دهید.
پرداخت درون اپ؛ جایی که کار جدی می شود
اگر هدف اپ شما دریافت پول است، پیاده سازی دستی انتقال کار درستی نیست. استاندارد پرداخت سولانا برای همین وجود دارد: یک قالب مشخص برای درخواست پرداخت که کیف پول ها می شناسند و کاربر فقط تایید می کند.
تفاوتش با انتقال ساده در تطبیق است: شما باید بتوانید بفهمید کدام پرداخت مربوط به کدام سفارش بوده و بدون شناسه مرجع این کار روی زنجیره ای که هزاران انتقال در ثانیه دارد شدنی نیست. جزئیات این جریان را در توضیح پرداخت سولانا پی در فروشگاه نوشته ایم.
دو مانع که برای توسعه دهنده ایرانی واقعی است
اول دسترسی به گره. ارائه دهندگان بزرگ خدمات گره، حساب سازی و در مواردی اتصال از آی پی ایران را محدود می کنند. برای توسعه می شود از نقاط پایانی عمومی استفاده کرد، ولی آنها محدودیت نرخ دارند و برای یک اپ واقعی جواب نمی دهند.
پرداخت هزینه همین سرویس ها هم مسئله جداگانه ای است، چون کارت بانکی ایرانی جایی پذیرفته نمی شود. رایج ترین راهی که توسعه دهنده ها انتخاب می کنند پرداخت با کدهای ارز الکترونیکی است و بر اساس سفارش های ثبت شده در پلتفرم دیجی دلار، اشتراک سرویس های ابری یکی از پرتکرارترین دلایل خرید همین کدهاست.
دوم و جدی تر، انتشار. حساب توسعه دهنده در فروشگاه های اپ برای ایران عملا در دسترس نیست و این محدودیت هیچ راه حل فنی ندارد. گزینه های واقعی، انتشار مستقیم فایل اندروید یا استفاده از فروشگاه های جایگزین است و هر دو دامنه کاربر شما را محدود می کنند.
صادقانه: اگر مخاطب هدفتان کاربر داخلی است، وب موبایل معمولا انتخاب عاقلانه تری از اپ بومی است. همان کار را می کند و مسئله انتشار را ندارد.
سوال های پرتکرار
برای برنامه نویسی سولانا روی موبایل چه زبانی لازم است؟
برای خود اپ، کاتلین در اندروید بومی یا جاوااسکریپت در ری اکت نیتیو. راست فقط وقتی لازم می شود که بخواهید برنامه ای روی خود زنجیره مستقر کنید و بسیاری از اپ های موبایل به آن نیازی ندارند.
آداپتور کیف پول موبایل روی آیفون کار می کند؟
نه. مستندات رسمی سولانا موبایل می گوید این پروتکل با آی او اس ناسازگار است و روی اپ و مرورگر آن پشتیبانی نمی شود. برای آی او اس باید از لینک های عمیق هر کیف پول استفاده کنید.
آیا برای ساخت اپ سولانا به گوشی اختصاصی نیاز دارم؟
نه. گوشی های اختصاصی این اکوسیستم امکاناتی برای نگه داری کلید اضافه می کنند، اما هیچ کدام پیش نیاز توسعه نیستند و اپ شما روی هر اندروید معمولی کار می کند.
هزینه اجرای یک اپ سولانا چقدر است؟
کارمزد تراکنش ها را کاربر می دهد، پس هزینه ثابت شما عمدتا سرویس گره است. اگر برنامه ای روی زنجیره مستقر کنید، برای فضای ذخیره سازی حساب ها هم حداقل موجودی لازم است که یک بار پرداخت می شود.
جمع بندی
برنامه نویسی سولانا روی موبایل از نظر فنی سخت نیست؛ محدودیت هایش را باید از اول بدانید. آداپتور کیف پول مسئله اندروید را حل می کند و برای آی او اس مسئله را باید خودتان حل کنید.
و تصمیم اول را قبل از اولین خط کد بگیرید: مخاطب شما روی اندروید است یا آیفون. این یک تصمیم است، دو تا اپ.