אחת מהשיטות לפתוח למשתמשים מוצרים והטבות באפליקציה היא ליצור מוצרים מתגמלים, או פריטים שהמשתמשים מקבלים אחרי שהם צופים במודעת וידאו. כשאתם מציעים מוצרים מתגמלים, אתם מאפשרים למשתמשים לקבל פרסים והטבות באפליקציה בלי שתצטרכו לבצע רכישות ישירות.
במאמר הזה נסביר איך להטמיע פונקציונליות ספציפית למוצרים עם תגמולים. התהליך מתואר בקטע תרשים תהליך העבודה בדף הזה.
זיהוי המוצרים במתנה באפליקציה
למוצרים במתנה יש SkuType
של INAPP
.
כדי לוודא שהמשתמשים יוכלו לצפות בכמה מודעות ולקבל כמה תגמולים, צריך לצרוך את המוצרים.
כדי שתוכלו להציע למשתמש מוצר עם פרס, עליכם לקבל את SkuDetails
של המוצר. לשם כך, צריך להפעיל את querySkuDetailsAsync()
עם SkuType.INAPP
בתור סוג המוצר.
הצהרה על מודעות שמתאימות לכל הגילאים
כדי לעזור לכם לעמוד בהתחייבויות המשפטיות שקשורות לילדים ולמשתמשים מתחת לגיל ההסכמה, כולל חוק הגנת הפרטיות של ילדים באינטרנט (COPPA) והתקנות הכלליות להגנה על מידע (GDPR), עליכם לציין באפליקציה אילו מודעות נחשבות כמודעות לילדים בארה"ב ואילו מודעות מיועדות למשתמשים מתחת לגיל ההסכמה החל במדינה שלהם. במרכז העזרה של AdMob מוסבר מתי צריך לתייג בקשות להצגת מודעות בתג תוכן לילדים ומתי צריך לתייג אותן בתג תוכן למשתמשים מתחת לגיל ההסכמה, וגם מהן ההשפעות של כך.
כשיוצרים את לקוח החיוב של האפליקציה, צריך להחליט אם הבקשות להצגת מודעות בתמורה לתגמול ייחשבו כתוכן שמיועד לילדים, או אם הן יישלחו למשתמשים מתחת לגיל ההסכמה. אם רוצים להחיל את ההגבלות האלה על בקשות המודעות, צריך להפעיל את השיטות setChildDirected()
ו-setUnderAgeOfConsent()
, ולהעביר ערכים מתאימים לכל שיטה.
קטע הקוד הבא מראה איך להצהיר שמודעות וידאו צריכות להיות מתאימות לילדים או למשתמשים מתחת לגיל ההסכמה:
Kotlin
val billingClient = BillingClient.newBuilder(context) .setListener(this) .setChildDirected(ChildDirected.CHILD_DIRECTED) .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT) .build()
Java
BillingClient billingClient = BillingClient.newBuilder(context) .setListener(this) .setChildDirected(ChildDirected.CHILD_DIRECTED) .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT) .build();
טעינת מודעות וידאו
לפני שמציגים למשתמש אפשרות לצפות במודעת וידאו כדי לקבל מוצר מתוגמל, צריך לטעון את הסרטון. לשם כך, יוצרים אובייקט RewardLoadParams
ומשייכים אותו לאובייקט SkuDetails
שמייצג את המוצר עם התגמול. לאחר מכן, צריך לקרוא לשיטה loadRewardedSku()
של לקוח החיוב, ולהעביר את האובייקט RewardLoadParams
ואובייקט RewardResponseListener
.
המאזין RewardResponseListener
יקבל הודעה כשהסרטון יסיים להיטען. המאזין יקבל גם התראה אם הסרטון לא זמין או אם מתרחשת שגיאה אחרת, כמו תפוגת זמן של שרת.
כדי לשמור על ביצועי המכשיר בזמן טעינת הסרטונים שמשויכים למוצרים בתשלום באפליקציה, כדאי לפעול לפי השיטות המומלצות הבאות:
- אפשר לטעון עד שלושה מק"טים של מוצרים במתנה בכל פעם.
- נסו לטעון את הסרטונים בכל פעם שהמשתמש נכנס לאפליקציה. השלב הזה יעזור לכם לבדוק אם הסרטונים עדיין נטענים וזמינים.
כשמחליטים מתי לטעון את הסרטונים, צריך לבחור את האיזון הנכון בין השימוש ברוחב הפס לבין תגובתיות האפליקציה, בהתאם לתרחיש לדוגמה:
- מומלץ לטעון את הסרטונים רק אחרי שמפעילים את
getSkuDetails()
למוצר המשויך עם התגמול. האפליקציה תמשיך להגיב במהירות, אבל יכול להיות שתאבדו נתוני רשת כתוצאה משימוש בנתונים כדי לטעון סרטון שהמשתמש אף פעם לא צופה בו. - כדאי לטעון את הסרטון לכל המאוחר כשהמשתמש מנווט לדף שבו הסרטון אמור להופיע. במקרה כזה, האפליקציה כמעט לא מבזבזת רוחב פס, אבל יכול להיות שהמשתמש יצטרך להמתין כמה רגעים לפני שיהיה אפשר ללחוץ על הלחצן לצפייה בסרטון.
- מומלץ לטעון את הסרטונים רק אחרי שמפעילים את
קטע הקוד הבא מדגים את התהליך לטעינת מודעת וידאו שתופעל לפני שהמשתמש יקבל את המוצר המותג.
Kotlin
if (skuDetails.isRewarded()) { val params = RewardLoadParams.Builder() .setSkuDetails(skuDetails) .build() mBillingClient.loadRewardedSku(params.build(), object : RewardResponseListener { override fun onRewardResponse(@BillingResponse responseCode : Int) { if (responseCode == BillingResponse.OK) { // Enable the reward product, or make // any necessary updates to the UI. } } }) }
Java
if (skuDetails.isRewarded()) { RewardLoadParams.Builder params = RewardLoadParams.newBuilder(); params.setSkuDetails(skuDetails); mBillingClient.loadRewardedSku(params.build(), new RewardResponseListener() { @Override public void onRewardResponse(int responseCode) { if (responseCode == BillingResponse.OK) { // Enable the reward product, or make // any necessary updates to the UI. } } }); }
מתן רכישות בתמורה לתגמול למשתמשים
אם ספריית החיובים ב-Google Play טוענת בהצלחה את הסרטון שמשויך למוצר עם פרס – כלומר, אם ה-RewardResponseListener
מקבל responseCode
של BillingResponse.OK
– תוכלו להפעיל את תהליך החיוב.
כדי להתחיל להציג מודעות של מוצר עם פרס, צריך להפעיל את הפונקציה launchBillingFlow()
, כמו שצריך לעשות עם כל סוגי המוצרים האחרים באפליקציה. גם אם המשתמש לא מבצע רכישה ישירה כדי לקבל מוצר תמורת פרס, עדיין צריך להפעיל את תהליך החיוב כדי שהמשתמש יוכל לקבל את המוצר ולהשתמש בו.
שימוש ברכישה
כדי להודיע ללקוח לחיוב שמשתמש קיבל מוצר תמורת פרס ונצל אותו, צריך לטפל ברכישה ב-method onPurchasesUpdated()
של מאזין הלקוח לחיוב. חשוב לדעת שצריך לנצל את הרכישות בתמורה לתגמול.
בדיקת המוצרים במתנה
כדי לבדוק איך האפליקציה טוענת מודעות וידאו ומספקת למשתמשים מוצרים עם תגמול, תוכלו להשתמש בבודקים מורשים. כברירת מחדל, הם מקבלים מודעות בדיקה במקום מודעות אמיתיות. במאמר בדיקת אפליקציה לחיוב ב-Google Play על ידי משתמשים מוסבר איך מגדירים חשבונות למשתמשי הבדיקה.
שיטה נוספת לבדיקה היא להשתמש במזהה המוצר android.test.reward
. המוצר הספציפי הזה הוא שם שמור בחיוב ב-Google Play, ולכן אין צורך להוסיף אותו לרשימת המוצרים בתוך האפליקציה ב-Play Console.
זהירות: כשבודקים את המוצרים בתשלום באפליקציה, אין להשתמש במוצרים אמיתיים. אחרת, יכול להיות שהחשבון שלכם יסומן כחשבון ספאם או כחשבון שמקורו בתרמית.
עם זאת, בסיום הבדיקה, חשוב להחליף את android.test.reward
במזהי המוצרים של המוצרים בפועל עם התגמולים, לפני הפריסה של אפליקציית הייצור למשתמשים הקצה.
תרשים של תהליך העבודה של מוצרים במתנה
בתרשים התהליך הבא אפשר לראות איך המשתמש, האפליקציה וספריית החיובים ב-Google Play פועלים יחד כדי להציג מודעה וידאו ולהעניק למשתמש גישה למוצר עם פרסים: