«

»

Dec 15

In App Billing V2

In App Billing:

 
 

רקע תאורטי:

 

חוץ מהאפשרות הרגילות להרוויח מאפליקציה:

 

1. למכור את האפליקציה

 

2. לתת להוריד אותה בחינם, ולהרוויח מקליקים על פרסומות שמכניסים.

 

גוגל הוסיפה עוד שתי דרכים שניתן להרוויח מאפליקציה שהעלת ל Market:

 

3. In App Billing או Freemium (חיוב בתוך האפליקציה) ז.א. שתוך כדי השימוש באפליקציה, המשתמש יכול לקנות תוכן וירטואלי של האפליקציה, כגון פתיחת עוד אפשרויות או לדוגמא שלבים במשחק.

 

4. Subscription – המשתמש משלם עבור השימוש באפליקציה באופן חודשי או שנתי.
יש לציין שלפי מחקרים סטטיסטיים של גוגל רוב האפליקציות המרוויחות בשוק משתמשות באפשרות של חיוב בתוך האפליקציה.
כאשר מישהו קונה מוצר וירטואלי מתוך החיוב באפליקציה, אין לו אפשרות לערער על הקניה ולדרוש החזר. באופן ברירת המחדל הצדק פה הוא בידי המוכר ולא הלקוח. בניגוד לקניה רגילה שאם לקוח קונה אפליקציה הוא יכול להתחרט תוך 15 דקות ולקבל את כספו בחזרה (לאפליקציה בפחות מ 10$ בלי בירור מגוגל, ובאפליקציות שמעל 10$ אז גוגל מחליטים, וזה לרוב לטובת הלקוח).
עם זאת אפשר לזכות את הלקוח ורצוי בשביל למנוע ביקורת שלילית.

 

יש שני סוגים של חיוב בתוך האפליקציה:

 

1. Managed Per User Account – גוגל תאכוף שיהיה אפשר לקנות את המוצר רק פעם אחת.

 

2. UnManaged – יהיה אפשר לקנות את המוצר מספר פעמים.

 

קניה בתוך האפליקציה עדיין נושאת בחיוב בגובה 30% שהולכים לגוגל (אחרי המע”מ) ואפשר לתמחר אותה במחיר שונה לכל אפליקציה. ממש כמו קניה רגילה של אפליקציה.

מבחינה אדמיניסטרטיבית, צריך כמובן שיהיה לך חשבון מפתח בגוגל ושיהיה לך מוגדרmerchant account, ולהגדיר ב Android Developer Console לאפליקציה שהעלת את המוצרים הוירטואלים שתמכור.
מבחינה טכנית, צריך להוסיף לאפליקציה שלך את הקוד של google לחיוב בתוך האפליקציה.

 
 

דוגמה והסבר:

 

קודם כל ניתן סקירה קצרה על מה שקורה בקוד של גוגל (לאחר שעברתי עליו מספר שעות לא מבוטל הבנתי שלא חייבים להבין אותו כי הוא סגור דיי טוב ולא נראה לי שיש יותר מידי אפליקציות שירצו לעשות בו שינויים).
זהו לינק למסמך Word שמכיל את המאמר המלא כולל טבלה עם הסבר על מה שקורה מאחורי הקלעים של ה In App Billing לכל המעוניין

לינק להורדת מסמך Word שמכיל את הסיכום המלא

 

אז איך משתמשים בחיוב בתוך האפליקציה בפועל?
חשוב לדעת שהעדכון של הקניות של המשתמש נשמר במסד הנתונים, אתה לא צריך לדאוג לכלום ממה שהוסבר בסעיף הקודם, מכיוון שזה כבר מבוצע ברקע.

 

במסד הנתונים יש שתי טבלאות:
1. טבלת history – _id|state|productId|purchaseTime|developerPayLoad שהיא פחות רלוונטית לנו.
2. טבלת purchased –strong> _id|quantity שהיא הטבלה הרלוונטית שבה נשמר ה id של המוצר שנקנה ובמקרה שהוא unmanaged, כמה פעמים הוא נקנה.

 

בשביל לבצע קניה:
1. קודם כל נוודא שאפשר להשתמש בחיוב בתוך האפליקציה:
if (!mBillingService.checkBillingSupported(Consts.ITEM_TYPE_INAPP)) {

    showDialog(DIALOG_CANNOT_CONNECT_ID);

}

 

2. נשלח בקשת קניה:

boolean sentPurchaseReqeustSucceded = mBillingService.requestPurchase([name_of_item_to_buy], "inapp", null);

כעט תפתח למשתמש אפליקציית Google Play ושם הוא יחליט אם לקנות את המוצר או לא. כאשר הוא יסיים הוא יחזור לאפליקציה שלנו. זהו.

 

בשביל לבדוק אם משתמש קנה מוצר:
כל התהליך שתיארתי בסעיף הראשון של google כבר דואג לקניה מרגע ששלחת את בקשת הקניה. כל מה שצריך לעשות זה פשוט לתשאל את ה DB האם המוצר קיים:
_billingDatabase = new BillingDatabase(this);
isCustomizeImageEnabled = _billingDatabase.isInAppProductPurchased([name_of_item_to_buy]);

//Lior: Added to query the DB
    public boolean isInAppProductPurchased(String inAppProductSKU) {
    	Cursor cursor = mDb.query(PURCHASED_ITEMS_TABLE_NAME, PURCHASED_COLUMNS, null,
                null, null, null, null);
    	try {
			int productIdCol = cursor.getColumnIndexOrThrow(BillingDatabase.PURCHASED_PRODUCT_ID_COL);
			while (cursor.moveToNext()) {
				String productId = cursor.getString(productIdCol);
				if(productId.equals(inAppProductSKU)) {		
					return true;	
				}
			}
		} finally {
			cursor.close();
		} 	
    	return false; 	
    }

 

4. כאשר נעלה את האפליקציה נצטרך להוסיף את המוצרים ב Developer Console ע”י לחיצה על ה In-App Products מתחת לאפליקציה, להוסיף מוצר, לקבוע לו מחיר. והכי חשוב שה in-app Product Id שלו יהיה בהתאמה למה שרשמנו בקוד בפרמטר שהעברנו לבקשות ה requestPurchase כ [name_of_item_to_buy]

יש לשים לב שמומלץ להשתמש ב observer שהם מימשו בפרויקט הדוגמה שלהם, כולל מתודות ה restoreDatabase, doInitializeItems שלהם וכו’.
ובשביל לבדוק את האפליקציה, אי אפשר להשתמש בחשבון gmail שאיתו העלתה את האפליקציה, אלא בחשבון אחר שמוגדר כ Test Account ב Edit profile וכך גם לא צריך לעשות publish לאפליקציה בשביל לבדוק, אלא רק לשמור אותה.

 
 

לינק להורדת הפרויקט לדוגמה

 

בהצלחה !

 

Leave a Reply

Your email address will not be published.

אתם יכולים להשתמש באפשרויות ותגי ה-HTMLהבאים: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>