یکپارچه‌سازی صورت‌حساب Play خود را به حداکثر برسانید

۱. مرور کلی

با استفاده از این آزمایشگاه کد یکپارچه‌سازی کتابخانه پرداخت Play از Google Play، جریان‌های درآمد خود را بهینه کنید و برنامه خود را با اطمینان راه‌اندازی کنید. این آزمایشگاه کد ساختاریافته شما را در راه‌اندازی، آزمایش و پیاده‌سازی پردازش خرید قابل اعتماد راهنمایی می‌کند و به شما این امکان را می‌دهد که از اهداف کسب درآمد خود پشتیبانی کنید و یک تجربه کاربری یکپارچه‌تر ارائه دهید.

ما به شما کمک خواهیم کرد تا اعلان‌های توسعه‌دهنده‌ی بلادرنگ (RTDN) و آزمایشگاه پرداخت Play را برای اشتراک‌ها و محصولات یکبار مصرف برای برنامه‌ها و بازی‌های خود تنظیم کنید. شما یاد خواهید گرفت که چگونه ریزش مشترکین را کاهش دهید؛ در برابر کلاهبرداری و سوءاستفاده محافظت کنید؛ موارد پیشرفته را آزمایش کنید؛ مشکلات بالقوه را شبیه‌سازی، بازتولید و برطرف کنید؛ و پیشنهادات و تغییرات قیمت را بدون تأثیرگذاری بر کاربران آزمایش کنید.

در پایان، شما آماده خواهید بود تا استراتژی‌های بازگشت سرمایه را پیاده‌سازی کنید، چالش‌های ادغام را به سرعت حل کنید، بازگشت سرمایه را بهبود بخشید، یک تجربه عالی ارائه دهید و برنامه و به‌روزرسانی‌های خود را با اطمینان منتشر کنید.

پیش‌نیازها

آنچه یاد خواهید گرفت

  • چگونه چرخه عمر خرید خود را به درستی مدیریت کنید تا با تکنیک‌هایی برای بهبود تبدیل‌های خرید و حفظ مشتری، به بهینه‌سازی رشد کمک کنید.
  • نحوه تنظیم اعلان‌های توسعه‌دهنده بلادرنگ (RTDN) با استفاده از Google Cloud Pub/Sub، که می‌توان از آن برای اجرای کمپین‌های بازگشت به چرخه حیات و سایر استراتژی‌های مدیریت چرخه عمر استفاده کرد.
  • نحوه تنظیم یک گیرنده در سرور backend شما برای مدیریت ایمن اعلان‌ها با ردیابی دقیق و احراز هویت برای کاهش بازپرداخت‌های ناخواسته یا خطرات کلاهبرداری و سوءاستفاده
  • چگونه با استفاده از Play Billing Lab، یکپارچه‌سازی خود را آزمایش کرده و خطاها را شبیه‌سازی کنید تا تجربه کاربری خود را بهبود بخشیده و در عین حال هزینه‌های توسعه را کاهش دهید

آنچه نیاز دارید

۲. استراتژی‌های کسب درآمد برای اشتراک‌ها و خریدهای یک‌باره

هنگام فروش محصولات دیجیتال از طریق اپلیکیشن، یک استراتژی کسب درآمد موفق باید کل تجربه کاربری را در نظر بگیرد، چه برای خریدهای یک‌باره و چه برای اشتراک‌ها. یک تجربه یکپارچه می‌تواند آمادگی خرید را افزایش و ریزش را کاهش دهد.

یک جریان خرید رایج برای خرید یا اشتراک یک‌باره شامل چندین مرحله خواهد بود:

  1. کاربر اقلام را برای خرید مرور می‌کند.
  2. جریان خرید را برای کاربر راه‌اندازی کنید تا خرید و پرداخت را تکمیل کند.
  3. به سرور خود در مورد خرید تکمیل شده اطلاع دهید
  4. خرید را روی سرور خود تأیید کنید.
  5. محتوا را به کاربر بدهید.
  6. تحویل محتوا را تأیید کنید. برای محصولات مصرفی، خرید را در زمان مناسب انجام دهید تا کاربر بتواند دوباره آن کالا را خریداری کند.

ادغام درون‌برنامه‌ای به شما امکان می‌دهد جریان‌های خرید را راه‌اندازی کرده و این تجربه کاربری را مدیریت کنید، اما به‌روزرسانی مداوم بخش پشتیبانی در مورد حق خرید کاربران بسیار مهم است. این امر برای ردیابی خریدها و مدیریت سایر جنبه‌های تجربه کاربری، مانند حق خریدهای چند پلتفرمی، مهم است.

اعلان‌های توسعه‌دهنده‌ی بلادرنگ (RTDN) راهی عالی برای تشخیص این مراحل مختلف در چرخه‌ی خرید هستند و می‌توانند به طور مؤثر هم به عنوان یک ابزار ردیابی عملکرد بلادرنگ و هم به عنوان ابزاری برای فعال کردن استراتژی‌های بازگشت مشترکین مورد استفاده قرار گیرند.

برای مثال: فرض کنید کاربر شما به تازگی یک کالای جدید خریداری کرده یا پرداخت خود را انجام نداده است، بنابراین اشتراک وارد دوره مهلت شده است. با RTDN مناسب، می‌توانید تقریباً در لحظه تشخیص دهید که وضعیت کاربر تغییر کرده است و بر اساس آن عمل کنید، یا با درگیر کردن بیشتر کاربر با کالایی که تازه خریداری کرده یا با ارسال ایمیل‌های یادآوری برای به‌روزرسانی جزئیات پرداخت خود برای ادامه اشتراک.

RTDNها همچنین راهی عالی برای افزودن کنترل‌های اضافی سمت سرور هستند تا به شما در مدیریت خریدها حتی زمانی که کلاینت کاربر با مشکل مواجه است، کمک کنند. فرض کنید کاربری خرید موفقی انجام داده و از گوگل تأیید دریافت کرده است، اما دستگاه او قبل از اینکه دستگاهش اتصال به شبکه را از دست بدهد، از طریق شنونده خرید، اعلان خرید را دریافت می‌کند. با RTDNها، شما یک اعلان مستقل از طریق سرور خود دریافت خواهید کرد که به شما امکان می‌دهد خرید را تشخیص داده و حق استفاده را مستقل از مشکل کلاینت به کاربر اعطا کنید و فرآیند خرید قابل اعتمادی را تضمین کنید.

می‌توانید در اینجا درباره انواع RTDNهایی که در حال حاضر پشتیبانی می‌شوند، اطلاعات بیشتری کسب کنید. هر نوع RTDN وضعیت خرید متمایزی را نشان می‌دهد. پیاده‌سازی مکانیسم‌های مدیریت مربوطه برای اطمینان از پردازش صحیح در موارد استفاده شما بسیار مهم است. این آزمایشگاه کد، مثالی را ارائه می‌دهد که پیام RTDN را در سرور امن backend شما مدیریت می‌کند، از جمله دریافت پیام، اعتبارسنجی خرید و اعطای مجوز به کاربر صحیح، زمانی که کاربر با موفقیت خریدی را در برنامه شما انجام می‌دهد. و در مرحله بعد، نحوه پیکربندی RTDNها را برای برنامه شما نشان خواهیم داد.

۳. پیکربندی اعلان‌های توسعه‌دهنده در لحظه (RTDN)

اعلان‌های توسعه‌دهنده‌ی بلادرنگ (RTDN) از Google Cloud Pub/Sub بهره می‌برند تا به شما امکان دهند فوراً به تغییرات وضعیت خرید واکنش نشان دهید. Cloud Pub/Sub یک سرویس پیام‌رسانی بلادرنگ کاملاً مدیریت‌شده است که می‌توانید از آن برای ارسال و دریافت پیام بین برنامه‌های مستقل استفاده کنید. Google Play از Cloud Pub/Sub برای انتشار اعلان‌های فوری در مورد موضوعاتی که در آنها مشترک می‌شوید، استفاده می‌کند.

برای فعال کردن RTDN، ابتدا باید Cloud Pub/Sub را با استفاده از پروژه Google Cloud Platform (GCP) خود راه‌اندازی کنید و سپس اعلان‌ها را برای برنامه خود فعال کنید. اگر با GCP و Cloud Pub/Sub آشنا نیستید، به راهنمای شروع سریع مراجعه کنید.

ایجاد تاپیک

برای شروع دریافت اعلان‌ها، باید موضوعی ایجاد کنید که گوگل پلی باید اعلان‌ها را در آن منتشر کند. برای ایجاد یک موضوع، دستورالعمل‌های موجود در «ایجاد موضوع» را دنبال کنید.

ایجاد اشتراک Pub/Sub

برای دریافت پیام‌های منتشر شده در یک موضوع، باید یک اشتراک انتشار/زیرمجموعه برای آن موضوع ایجاد کنید. برای ایجاد اشتراک انتشار/زیرمجموعه، موارد زیر را انجام دهید:

  1. برای آشنایی با نحوه پیکربندی اشتراک به صورت push subscription یا pull subscription ، راهنمای Cloud Pub/Sub Subscriber را مطالعه کنید. در این آزمایشگاه کد، ما با یک اشتراک pull کار خواهیم کرد که به سرور backend امن شما نیاز دارد تا درخواست‌ها را به سرور Cloud Pub/Sub برای بازیابی پیام‌ها آغاز کند.
  1. برای ایجاد اشتراک، دستورالعمل‌های موجود در بخش «افزودن اشتراک» را دنبال کنید.

اعطای حق انتشار در موضوع شما

Cloud Pub/Sub مستلزم آن است که به Google Play امتیازات لازم برای انتشار اعلان‌ها در موضوع خود را اعطا کنید.

  1. کنسول گوگل کلود را باز کنید.
  2. پروژه خود را انتخاب کنید و سپس در نوار جستجو عبارت " Pub/Sub" را جستجو کنید و به صفحه پیکربندی Pub/Sub بروید. Search and land on the Pub/Sub config page
  3. موضوع مورد نظر خود را پیدا کنید و تنظیمات مجوزها را باز کنید. Open the permission setting
  4. برای افزودن حساب سرویس google-play-developer-notifications@system.gserviceaccount.com روی ADD PRINCIPAL کلیک کنید و به آن نقش Pub/Sub Publisher بدهید. Add the service account google-play-developer-notifications@system.gserviceaccount.com, and grant it the role of Pub/Sub Publisher
  5. برای تکمیل تنظیمات موضوع، روی ذخیره کلیک کنید. Click Save to complete the topic set up.

فعال کردن RTDN برای برنامه شما

یاد بگیرید که اعلان‌های توسعه‌دهنده‌ی بلادرنگ (RTDN) را تنظیم کنید تا ادغام Play Billing خود را به طور قابل توجهی بهبود بخشید. می‌توانید با پیام‌رسانی شخصی‌سازی‌شده، قابلیت اطمینان خرید را بهبود بخشید و همچنین از کلاهبرداری و سوءاستفاده جلوگیری کنید تا بازگشت سرمایه کلی خود را بهبود بخشید.

RTDNها به‌روزرسانی‌های فوری سرور به سرور را مستقیماً از Google Play برای رویدادهای کلیدی، مانند تمدید اشتراک، خریدهای جدید و مشکلات پرداخت، ارائه می‌دهند. آن‌ها به سیستم‌های backend شما کمک می‌کنند تا به‌طور خودکار با وضعیت واقعی حقوق کاربر همگام‌سازی شوند، فراتر از محدودیت‌های سمت کلاینت حرکت کنند و شما را قادر سازند تا فوراً و به‌طور مناسب واکنش نشان دهید.

نحوه فعال کردن اعلان‌های توسعه‌دهنده در لحظه برای برنامه شما:

  1. کنسول گوگل پلی را باز کنید.
  2. برنامه خود را انتخاب کنید.
  3. به «کسب درآمد از طریق بازی» > «تنظیمات کسب درآمد» بروید.
  4. به بخش اعلان‌های توسعه‌دهنده‌ی بلادرنگ (Real-time developer notifications) بروید.
  5. گزینه فعال کردن اعلان‌های بلادرنگ را تیک بزنید.
  6. در فیلد نام موضوع (Topic name )، نام کامل موضوع Cloud Pub/Sub را که قبلاً پیکربندی کرده‌اید، وارد کنید. نام موضوع باید به فرمت projects/{project_id}/topics/{topic_name} باشد که در آن project_id شناسه منحصر به فرد پروژه شما و topic_name نام موضوعی است که قبلاً ایجاد شده است.
  7. برای ارسال یک پیام آزمایشی، روی «ارسال پیام آزمایشی» کلیک کنید. انجام یک انتشار آزمایشی به شما کمک می‌کند تا از تنظیم و پیکربندی صحیح همه چیز اطمینان حاصل کنید. اگر انتشار آزمایشی با موفقیت انجام شود، پیامی نمایش داده می‌شود که نشان می‌دهد انتشار آزمایشی موفقیت‌آمیز بوده است. اگر برای این موضوع، اشتراکی پیوست کرده‌اید، باید پیام آزمایشی را دریافت کنید. برای اشتراک pull، به اشتراک در Cloud Console بروید، روی «مشاهده پیام‌ها» کلیک کنید و به دریافت پیام‌ها ادامه دهید. برای جلوگیری از تحویل مکرر توسط Cloud Pub/Sub، باید هر پیامی را که pull کرده‌اید، تأیید کنید. برای اشتراک push ، بررسی کنید که آیا پیام آزمایشی به نقطه پایانی push شما تحویل داده شده است یا خیر. یک کد پاسخ موفقیت‌آمیز به عنوان پیام تأیید عمل می‌کند. اگر انتشار با شکست مواجه شود، خطایی نشان داده می‌شود. مطمئن شوید که نام موضوع صحیح است و حساب سرویس google-play-developer-notifications@system.gserviceaccount.com به موضوع دسترسی Pub/Sub Publisher دارد.
  8. انواع اعلان‌هایی را که می‌خواهید دریافت کنید، انتخاب کنید.
  • برای اشتراک‌ها و تمام خریدهای لغو شده اعلان دریافت کنید - اعلان‌های توسعه‌دهنده را در لحظه مربوط به اشتراک‌ها و خریدهای لغو شده دریافت کنید. برای خریدهای یکباره محصول اعلان دریافت نخواهید کرد.
  • دریافت همه اعلان‌ها برای اشتراک‌ها و محصولات یکبار مصرف - برای همه رویدادهای اشتراک و خرید لغو شده اعلان دریافت کنید. همچنین رویدادهای خرید محصول یکبار مصرف، مانند ONE_TIME_PRODUCT_PURCHASED و ONE_TIME_PRODUCT_CANCELED را دریافت خواهید کرد. برای کسب اطلاعات بیشتر در مورد این رویدادهای خرید، به چرخه عمر خرید یکبار مصرف مراجعه کنید.

a266e5dec5c93cd8.png

  1. روی ذخیره تغییرات کلیک کنید.

اکنون اعلان‌های توسعه‌دهنده‌ی بلادرنگ را برای برنامه‌ی خود تکمیل کرده‌اید و ابزارهایی را برای مقابله با چالش‌های رایج، مانند ریزش کاربر از طریق پیام‌های بازگشت به سایت، یا کلاهبرداری و سوءاستفاده، در اختیار دارید. در بخش بعدی، یک مشترک در سرور امن backend شما ایجاد خواهیم کرد تا پیام‌های ارسالی به Cloud Pub/Sub topic شما را مصرف کند.

۴. دریافت اعلان‌ها

برای بهترین تجربه کاربری در برنامه، به‌روز نگه داشتن سرور بک‌اند در مورد وضعیت خریدها بسیار مهم است. به عنوان مثال، وقتی کاربری با موفقیت خریدی را با پرداخت در برنامه انجام می‌دهد، باید محتوا را در اسرع وقت به حساب خود تحویل دهد.

این امر مستلزم آن است که تکمیل خرید به موقع شناسایی و پردازش شود. کتابخانه صورتحساب Play روش‌های متعددی برای شناسایی خریدها در برنامه شما ارائه می‌دهد. پس از تشخیص یک خرید تکمیل شده، برنامه شما باید به سرور backend خود اطلاع دهد تا خرید را تأیید کند، محتوا را به کاربر صحیح اعطا کند و سپس به Google اطلاع دهد که خرید پردازش شده است. با این حال، ممکن است اتفاق بیفتد که برنامه شما به دلایل مختلف خرید را به موقع تشخیص نداده باشد. به عنوان مثال، یک کاربر می‌تواند خرید موفقی انجام دهد و از Google تأیید دریافت کند، اما دستگاه او قبل از اینکه دستگاهش اتصال شبکه را از دست بدهد و برنامه شما از طریق رابط کتابخانه صورتحساب Play اعلان دریافت کند، اتصال به شبکه را از دست می‌دهد. RTDN کنترل‌های سمت سرور اضافی را برای کمک به شما در مدیریت خریدها حتی زمانی که مشتری کاربر مشکلی دارد، فراهم می‌کند. RTDN اعلان‌های مستقل به سرور شما را پس از تغییرات وضعیت خرید تضمین می‌کند و به شما این امکان را می‌دهد که تغییرات وضعیت خرید را تقریباً بلافاصله از طریق یک مسیر دوم مستقل از مشکلات احتمالی مشتری تشخیص دهید و فرآیند خرید قابل اعتمادتری را تضمین کنید.

در این بخش، شما یک مشترک (subscriber) ایجاد خواهید کرد تا پیام‌های ارسالی به موضوع Cloud Pub/Sub شما را با استفاده از کتابخانه‌های Cloud Pub/Sub Client دریافت کند. این کتابخانه‌ها به زبان‌های مختلفی در دسترس هستند. در بخش‌های بعدی، مشترک را برای تأیید خرید، اعطای مجوز به کاربر صحیح و تأیید/مصرف خرید در سرور اضافه خواهیم کرد. برای این آزمایشگاه کد، ما از جاوا استفاده می‌کنیم.

هر انتشاری که در یک موضوع Cloud Pub/Sub انجام می‌شود، شامل یک فیلد داده کدگذاری شده با base64 است.

{
 "message": {
   "attributes": {
     "key": "value"
   },
   "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
   "messageId": "136969346945"
 },
 "subscription": "projects/myproject/subscriptions/mysubscription"
}

پس از رمزگشایی فیلد داده کدگذاری شده با base64، DeveloperNotification شامل فیلدهای زیر خواهد بود:

{
 "version": string,
 "packageName": string,
 "eventTimeMillis": long,
 "oneTimeProductNotification": OneTimeProductNotification,
 "subscriptionNotification": SubscriptionNotification,
 "voidedPurchaseNotification": VoidedPurchaseNotification,
 "testNotification": TestNotification
}

برای اطلاعات بیشتر، لطفاً به مرجع اعلان‌های توسعه‌دهنده در لحظه مراجعه کنید.

کد نمونه‌ی یک NotificationReceiver برای سرور امن backend شما جهت پردازش پیام‌های Pub/Sub در زیر آمده است. برای احراز هویت در مرکز فرماندهی امنیت، اعتبارنامه‌های پیش‌فرض برنامه را تنظیم کنید، به بخش تنظیم احراز هویت برای یک محیط توسعه‌ی محلی مراجعه کنید.

import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.PubsubMessage;
import java.util.Base64;
import org.json.JSONObject;

/** Real-time developer notifications receiver. */
public class NotificationReceiver {

 private NotificationReceiver() {}

 /*
  * Receive notification messages from the subscription.
  *
  * @param projectId The project ID of your Google Cloud Project.
  * @param subscriptionId The subscription ID of the subscriber to the pub/sub topic.
  */
 public static void receiveNotificationMessages(String projectId, String subscriptionId) {
   ProjectSubscriptionName subscriptionName =
       ProjectSubscriptionName.of(projectId, subscriptionId);

   try {
     Subscriber subscriber =
         Subscriber.newBuilder(subscriptionName, new NotificationMessageReceiver()).build();
     // Start the subscriber.
     subscriber.startAsync().awaitRunning();

     subscriber.awaitTerminated();
   } catch (IllegalStateException e) {
     System.out.println("Subscriber stopped: " + e);
   }
 }

 static class NotificationMessageReceiver implements MessageReceiver {

   @Override
   public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
     // Decode the data into a String from the message data field.
     String jsonString = new String(Base64.getDecoder().decode(message.getData().toStringUtf8()));
     // Parse the String into a JSON object.
     JSONObject