این سند به سوالات رایج در مورد SDKها و انتشار برای بازیهای Google Play در رایانه شخصی پاسخ میدهد.
چگونه VPN اضافه کنیم؟
برای توسعهدهندگانی که نیاز دارند بازی خود را در مناطقی آزمایش کنند که Google Play Games در رایانه شخصی پشتیبانی نمیشود، توصیه میکنیم از VPN برای دریافت آدرس IP از یک منطقه پشتیبانیشده استفاده کنند.
مطمئن شوید که حالت TUN را روی VPN فعال کردهاید. راهنمایی در مورد فعال کردن حالت TUN و پیکربندی فایروال را میتوانید در دفترچه راهنمای ارائه دهنده VPN پیدا کنید.
پس از فعال شدن حالت TUN، برای آزمایش، Google Play Games را روی رایانه شخصی و شبیهساز نصب کنید .
آیا میتوانید از جریان خرید بدون سرور پشتیبان استفاده کنید؟
از دیدگاه امنیتی، پردازش بدون سرور پشتیبان معمولاً توصیه نمیشود.
برای اطلاعات بیشتر، به فرآیند بدون سرور پشتیبان مراجعه کنید.
چگونه شروع به توسعه بازیهای گوگل پلی روی کامپیوتر با یونیتی یا ویرایشگر UE کنیم؟
- حالت توسعهدهنده را فعال کنید و آزمایش را ادامه دهید.
- فایلهای
manifest.xmlو.dllرا اضافه کنید. برای اطلاعات بیشتر، به سند توسعهدهنده مراجعه کنید. - برای اهداف آزمایشی، یک GUID شریک دسترسی زودهنگام ثبت کنید.
وقتی با استفاده از برنامه Google Play Games یک بازی را شروع میکنید، آیا جزئیات حساب گوگل شما همگامسازی میشود؟
پس از اجرای بازی از طریق کلاینت Google Play Games، حساب کاربری به طور خودکار همگامسازی میشود و نیازی به ورود مجدد از طریق فرآیند ورود به سیستم Google نیست.
هنگام ارسال بسته نرمافزاری ویندوز (WAB) با استفاده از لانچر سهگانه، آیا بسته بازی برای بررسی الزامی است؟
شما میتوانید فقط فایل نصبی خود را ارسال کنید و نیازی به ارسال کل بسته بازی خود ندارید، منتقد میتواند بسته بازی شما را با استفاده از فایل نصبی دانلود کند.
اگر بازیکنی به جای Google Play Client از یک لانچر ۳P استفاده کند، آیا حساب Play Games Services او به طور خودکار همگامسازی میشود؟
برای اینکه توابع SDK کار کنند، بازی باید مستقیماً از طریق کلاینت Google Play Games اجرا شود. اگر فرآیند دیگری، مانند یک نصبکننده یا برنامهی اجراکننده، بازی را آغاز کند، آن فرآیند نیز باید از کلاینت Google Play Games اجرا شود. بازی باید تمام پارامترهای دریافتی از کلاینت را به فرآیند کلاینت منتقل کند.
SDK چگونه ورود به حساب گوگل را برای چندین نمونه یا حساب کاربری مدیریت میکند؟
هر اجرای بازی در Google Play Games به عنوان یک "جلسه بازی" در نظر گرفته میشود و هر "جلسه بازی" میتواند یک حساب کاربری مرتبط با خود داشته باشد. این حسابها میتوانند متفاوت باشند. بنابراین اگر بازی را با حساب A اجرا کنید و سپس به حساب B بروید و دوباره اجرا کنید، هر دو میتوانند همزمان اجرا شوند.
آیا محدودیتی برای اندازه فایل WAB (بسته نرمافزاری ویندوز) وجود دارد؟
شما میتوانید تا سقف ۱۰ گیگابایت فایل برای WAB آپلود کنید.
آیا سیستمهای پرداخت مبتنی بر API موجود پس از ادغام Google Play Games on PC SDK مجاز هستند؟
تمام پرداختها باید توسط Google Play Games on PC SDK با استفاده از Google Play Billing انجام شود. شما نمیتوانید از روش پرداخت مبتنی بر API موجود خود در همان بازی استفاده کنید.
آیا محیطهای تست باز یا تست بستهای مشابه موبایل وجود دارد؟
اگرچه در حال حاضر یک محیط آزمایشی (sandbox) اختصاصی برای همه نسخهها در دسترس نیست، اما ما نیاز به یک محیط آزمایشی شبیه به محیط عملیاتی برای توسعهدهندگان را تشخیص میدهیم. به زودی یک راهحل قویتر ارائه خواهد شد.
ما نمیتوانیم خریدهای آغاز شده در حالت توسعهدهنده را به درستی انجام دهیم؟
خرید در حالت توسعهدهنده باید ظرف ۳ دقیقه انجام شود، در غیر این صورت ممکن است مبلغ خرید مسترد شده باشد.
آیا تفاوتی بین API (قدیمی) و Google Play Games on PC SDK وجود دارد؟
- نسخه قدیمی فقط روی صورتحساب متمرکز بود
- این SDK از سرویس دسکتاپ گوگل (GDS) و تمام ویژگیهای کامپیوتر شخصی پشتیبانی خواهد کرد.
- رابط SDK مناسب برای توسعهدهندگان
- نیازی به ورود به سیستم گوگل مبتنی بر مرورگر نیست
آیا روش جایگزینی برای راهاندازی اولیه SDK با اجرای مستقیم بازی با استفاده از لانچر بازی، بدون نیاز به استفاده از Google Play Games در کامپیوتر، وجود دارد؟
بازی باید از طریق کلاینت Google Play Games on PC اجرا شود. برای جزئیات بیشتر، به سند توسعهدهنده مراجعه کنید.
پرداختهای دورهای یا اشتراکها پشتیبانی نمیشوند؛ آیا برنامهای برای پیادهسازی این موضوع وجود دارد؟
هیچ برنامهای برای اضافه کردن این گزینههای خرید فراتر از خرید درونبرنامهای وجود ندارد، ما از دریافت بازخورد شما در مورد موارد استفاده خاص استقبال میکنیم.
آیا خطای billingerror از شروع جریان خرید ناشی میشود یا از نتیجه پرداخت؟
این پاسخ نتیجه پرداخت است. LaunchPurchaseFlow بلافاصله و بدون مسدود شدن برمیگردد، اما شما باید به فراخوانی گوش دهید تا بدانید چه زمانی تمام شده و نتیجه را ثبت کنید.
آیا راهی هست که بشه یه میانبر درست کرد که بشه مستقیم بازی رو باز کرد؟
برای باز کردن مستقیم بازی میتوانید از آدرس زیر استفاده کنید:
googleplaygames://launch/?pid=2&id=com.company.gamename
این URI از تشخیص باز بودن یا نبودن کلاینت Google Play Games on PC پشتیبانی میکند. اگر کلاینت باز نباشد، کلاینت Google Play Games قبل از اجرای بازی/لانچر باز میشود. برای جلوگیری از اجرای چندین نمونه از آن، باید بازی/لانچر را مدیریت کنید.
محدودیتهای درخواست API QueryProductDetails
حداکثر تعداد محصولاتی که میتوان در یک فراخوانی به API مربوط به QueryProductDetails درخواست داد، ۵۰ عدد است. اگر از این حد تجاوز کنید، باید درخواست را به چندین فراخوانی تقسیم کنید.
چرا بازی من بعد از آپلود اولین بسته نرمافزاری ویندوز (WAB) نصب یا نمایش داده نمیشود؟
اگر بازی شما بدون نسخه از پیش موجود برای کامپیوتر ("WAB برای اولین بار") در حال انتشار است، سیستم ممکن است به طور خودکار آن را در حالت نگهداری انتشار مدیریتشده قرار دهد. این اتفاق میافتد زیرا هیچ خط پایهای برای بهروزرسانی وجود ندارد. برای انتشار کامل WAB و در دسترس قرار دادن بازی برای نصب، باید به کنسول گوگل پلی بروید و اقدام انتشار مورد نیاز را به صورت دستی انجام دهید (برای مثال، روی "انتشار تغییرات" کلیک کنید).
اگر Google Play Games یک لانچر بازی شخص ثالث راهاندازی کند، چگونه مقداردهی اولیه را مدیریت میکنید؟
لازم نیست SDK را مستقیماً در لانچر خود ادغام کنید. با این حال، باید تمام آرگومانهای خط فرمان دریافت شده توسط لانچر از کلاینت Google Play Games را مستقیماً به فرآیند فرزند ایجاد شده (فایل اجرایی بازی) ارسال کنید. اگر مقداردهی اولیه با شکست مواجه شود (برای مثال، با برگرداندن kActionRequiredShutdownClientProcess )، تمام فرآیندها از جمله لانچر باید خاتمه یابند تا Google Play Games بتواند بازی را بازیابی و به طور خودکار دوباره راهاندازی کند. برای جزئیات بیشتر، به مرحله 5 در راهنمای راهاندازی مراجعه کنید.
آیا خطای تایم اوت در صورتی که کاربر در حین فرآیند خرید، مرورگر را بدون پرداخت ببندد، در نظر گرفته شده است؟
بله، این یک مشکل شناخته شده و یک رفتار از پیش تعیین شده در جریان فعلی مبتنی بر مرورگر است. گوگل به طور فعال روی یک ویژگی خرید یکپارچه (مبتنی بر WebView) کار میکند که جریان پرداخت را در داخل بازی حفظ کرده و این مشکل وقفه زمانی را حل میکند.
آیا SDK اصلی کامپیوتر از کاراکترهای چند بایتی در فایل صدور گواهینامه (PEM) پشتیبانی میکند؟
بله، SDK از کاراکترهای چند بایتی برای صدور گواهینامه پشتیبانی میکند.
چه پارامترهایی هنگام فراخوانی BillingClient::QueryPurchases یا BillingClient::LaunchPurchaseFlow مورد نیاز است؟
این تابع QueryPurchasesContinuation میپذیرد که یک فراخوانی تابع با امضای std::function<void(QueryPurchasesResult)> است. این فراخوانی، نتیجه را به همراه تمام جزئیات خرید ProductPurchaseDetails ) به شما ارسال میکند. این اطلاعات در فایلهای هدر SDK در فایل includes/billing/models.h موجود است.
تابع ok() در خروجی launch_purchase_flow_result دارای توابع ok() و code() است. تابع ok() میزان موفقیتآمیز بودن جریان را برمیگرداند. تابع code() مقدار BillingError ( includes/billing/enums.h ) را برمیگرداند که دارای 10 حالت خطای احتمالی، مانند لغو توسط کاربر یا خطای شبکه است.
آیا فراخوانی BillingClient::LaunchPurchaseFlow() از ارسال شماره سفارش سفارشی پشتیبانی میکند؟
در طراحی فعلی SDK، هیچ راهی برای ارسال payload خودتان وجود ندارد. با این حال، میتوانید هر ترکیبی از obfuscated_account_id و obfuscated_profile_id را ارائه دهید. میتوانید هیچ کدام، فقط یکی یا هر دو را ارائه دهید.
فیلد offer_token الزامی است و پیشنهاد خریدی را که کاربر در جریان پرداخت سعی در خرید آن دارد، مشخص میکند. در حال حاضر، هر SKU در Google Play دقیقاً یک پیشنهاد دارد (برای مثال، خرید یک کالا با قیمت 10 دلار). در آینده، تیم صورتحساب Play از چندین پیشنهاد پشتیبانی خواهد کرد.
برای اطمینان از مرتبط بودن فرادادهها در صورت وقفه در جریان خرید، قبل از اجرای پنجره خرید، فرادادهها را در سرور بکاند خود ذخیره کنید و آنها را با شناسه حساب کاربری، SKU خریداری شده و مهر زمانی فعلی مرتبط کنید. برای اطلاعات بیشتر، به بخش مرتبط کردن خرید با دادههای داخلی مراجعه کنید.
آیا ادغام Play Install Referrer کار میکند؟
آخرین نسخه SDK (25.5.409.0 و بالاتر) از API ارجاعدهنده نصب Play پشتیبانی میکند. برای اطلاعات بیشتر، به API ارجاعدهنده نصب Play مراجعه کنید.
آیا کاربر برای خرید هر بازی باید جداگانه وارد سیستم شود؟
حساب کاربری پیشزمینه در Google Play Games برای هر جلسه بازی استفاده میشود، بنابراین نیازی به ورود مجدد ندارید. حسابی که هنگام شروع جلسه بازی در Google Play Games استفاده میکنید، حسابی است که فراخوانیهای API از طریق آن صادر میشوند. وقتی یک جریان خرید را در مرورگر راهاندازی میکنید، باید وارد سیستم شوید و از همان حساب کاربری جلسه بازی استفاده کنید. اگر کاربر با حساب دیگری وارد سیستم شده باشد، جریان وب از او میخواهد که حسابهای خود را تغییر دهد.
پیشنیازهای تغییر از پرداخت با گوگل با OAuth به پرداخت با گوگل بومی با DLL چیست؟
بازیها میتوانند همچنان از ورود به سیستم OAuth با گوگل برای مدیریت حساب کاربری وارد شده استفاده کنند، اما گوگل توصیه میکند که استفاده از APIهای پرداخت قدیمی REST را متوقف کنید. تغییر از APIهای پرداخت REST (با ورود به سیستم OAuth2) به جریان SDK میتواند یک عملیات با علامتگذاری ویژگی باشد، بنابراین هر دو میتوانند برای مدتی در کنار هم وجود داشته باشند در حالی که بازی تغییر میکند.
آیا API درخواست پرداخت ( LaunchPurchaseFlow ) از طریق مرورگر وب پردازش میشود؟
بله، فعلاً از طریق مرورگر پردازش میشود. گوگل قصد دارد کل جریان را بدون اینکه بازی از طریق SDK قابل دستیابی باشد، تکمیل کند.
آیا میتوان پارامترهای مقداردهی اولیه را چندین بار دوباره استفاده کرد؟
این امر تا زمانی که کلاینت Google Play Games در حال اجرا باشد و اطلاعات ورود معتبر باشد، امکانپذیر است. با این حال، در سناریوهایی مانند سناریوی شرح داده شده در راهنما، تمام فرآیندهای راهاندازی شده توسط بازی باید با بستن بازی توسط کاربر یا خروج از بازی به دلیل خرابی مقداردهی اولیه SDK، مانند kActionRequiredShutdownClientProcess ، خاتمه یابند.
آیا میتوانید از کلیدهای رجیستری تحت HKEY_CURRENT_USER به جای HKEY_LOCAL_MACHINE استفاده کنید؟
شما باید کلیدهای رجیستری را بر اساس کندوی ریشه ایجاد کنید. میتوانید کندوی ریشه را بسته به هدف و ماهیت دادهها، روی HKEY_LOCAL_MACHINE یا HKEY_CURRENT_USER تنظیم کنید. کندوی HKEY_LOCAL_MACHINE به عنوان مثال در دستورالعملها استفاده شده است.
آیا یک بازی میتواند همزمان از SDK بومی و سیستمهای پرداخت قدیمی پشتیبانی کند؟
سیستم پرداخت بسته به نسخه باینری بازی، تحت یک مدل جریان دوگانه عمل میکند. کاربران نسخههای قدیمی به استفاده از جریان موجود ادامه میدهند و کاربران نسخههای جدید به پرداختهای مبتنی بر SDK روی میآورند. کاربران هر دو جریان پرداخت در طول دوره انتقال، در کنار هم وجود دارند.
چگونه WAB را برای آزمایش داخلی آپلود میکنید؟
حسابهای کاربری لیست مجاز را با گوگل به اشتراک بگذارید تا گوگل بتواند آنها را برای آزمایش داخلی فعال کند. پس از اینکه گوگل لیست را دریافت کرد، مطمئن میشود که آنها در فرآیند پذیرش (onboarding process) گنجانده شدهاند.
کجا تسترهای جدید اضافه میکنید؟
رابط گوگل شما برای هر پروژه کامپیوتری یک گروه ایمیل ایجاد میکند که باید حسابهای گوگل آزمایشکنندگان به آن اضافه شود. فقط اعضای این گروه ایمیل مجاز به دانلود بستههای آزمایشی از طریق بازیهای گوگل پلی هستند.
بسته رسمی کامپیوتر قبل از انتشار رسمی باید کجا آپلود شود؟
شما میتوانید بسته WAB را در محلی که در سوال اول ذکر شد آپلود کنید. با این حال، نمیتوانید آن را به صورت دستی منتشر کنید. شما باید زمان دقیق UTC (به ساعت) را به کارکنان پشتیبان گوگل ارائه دهید. سپس گوگل برنامه انتشار را پیکربندی میکند و اطمینان حاصل میکند که به موقع منتشر شود.
چگونه پس از راهاندازی رسمی، ارتقاءها و نگهداری را مدیریت میکنید؟
ارتقاءها و نگهداریهای بعدی باید از طریق لانچر شما انجام شود. کلاینت بازیهای گوگل پلی از عملکردهای بهروزرسانی پشتیبانی نمیکند، بنابراین لانچر باید بتواند هم بازی و هم خود لانچر را بهروزرسانی کند.
الزامات بررسی بستههای رایانه شخصی توسط گوگل چیست؟
بستههای کامپیوتری تحت اسکن بدافزار قرار میگیرند و پس از آن، بررسیکنندگان فقط مراحل نصب بازی، راهاندازی موفقیتآمیز و حذف نصب را آزمایش میکنند.
آیا ادغام همه APIها ضروری است؟
سایر APIها الزامی نیستند، اما مزایای بیشتری ارائه میدهند. google::play::billing برای خریدهای درونبرنامهای و فروش محتوای دیجیتال ضروری است. google::play::games::recall برای ردیابی دادههای ارجاعی مورد نیاز است تا به شما کمک کند بفهمید کدام منابع ترافیکی بیشترین کاربران را برای دانلود برنامه شما ارسال میکنند. google::play::games::integrity برای محافظت از برنامه شما در برابر عوامل مخرب با شناسایی دستگاههای بالقوه خطرناک و شبیهسازهای ناشناخته مورد نیاز است.
چرا برخی از فرآیندهای بازی با بسته شدن کلاینت بازیهای گوگل پلی متوقف میشوند، در حالی که برخی دیگر اینطور نیستند؟
گوگل زیرفرآیندها یا فرآیندهای بازی در حال اجرا را کنترل نمیکند. رفتار آن بستگی به این دارد که آیا بازی یک بازی شبیهسازی شده اندروید است یا یک بازی بومی کامپیوتر. بازیهای شبیهسازی شده در محیط خودشان نصب میشوند، بنابراین رفتار آنها تا حد زیادی به مقداردهی اولیه و خاموش شدن شبیهساز بستگی دارد.
آیا باید از قابلیت حذف نصب بازیهای گوگل پلی استفاده کنم یا از یک حذفکنندهی سفارشی؟
گوگل استفاده از قابلیت حذف نصب بازیهای گوگل پلی را توصیه میکند.