नमस्ते हमने इस ऐप को इनएप बिलिंग के साथ बाजार में जारी किया और हमारे लॉग दिखाते हैं कि बिलिंग सेवा (संभवतः ऐप स्वयं) कुछ ग्राहकों के उपकरणों पर गेटिंग्स को यादृच्छिक रूप से मारता रहता है। इस वजह से अगर खरीदारी सफल हुई या नहीं तो मैं अधिसूचना प्राप्त नहीं कर पा रहा हूं। कुछ ग्राहकों को अक्सर सफल खरीदारी करने के लिए दो बार खरीदना पड़ता है। हालांकि यह ग्राहकों के एक छोटे से प्रतिशत के साथ होता है लेकिन यह बहुत परेशान है। कोई भी विचार क्यों हो रहा है या इस समस्या के आसपास काम करने के लिए क्या किया जा सकता है।ऐप बिलिंग सेवा में कई बार मारे गए
उत्तर
क्या आप अपने ऐप बिलिंग में इस्तेमाल किए गए कोड को डाल सकते हैं? यह हो सकता है कि ऐप बिलिंग में उनके डिवाइस द्वारा समर्थित नहीं है या फिर भी यदि वे एंड्रॉइड मार्केट प्रसारण अधिसूचना तक पहुंचने का प्रयास करते समय इंटरनेट कनेक्शन खो देते हैं। मुझे अपने ऐप में उपयोग मूल रूप से इस तरह है:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(BillingHelper.isBillingSupported()){
switch (arg2) {
case 0:
Log.d("Appname", "30 coins");
BillingHelper.requestPurchase(context, "com.paid.smallcoinbundle");
break;
case 1:
Log.d("Appname", "85 coins");
BillingHelper.requestPurchase(context, "com.paid.medcoinbundle");
break;
case 2:
Log.d("Appname", "175 coins");
BillingHelper.requestPurchase(context, "com.paid.midcoinbundle");
break;
case 3:
Log.d("Appname", "500 coins");
BillingHelper.requestPurchase(context, "com.paid.maxcoinbundle");
break;
default: Log.d("Appname", "Something broke");
break;
}
// BillingHelper.requestPurchase(mContext, "android.test.purchased");
// android.test.purchased or android.test.canceled or android.test.refunded or com.blundell.item.passport
} else {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("In App Billing isnt supported by your device");
Toast toast = new Toast(getBaseContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
return;
}
}
फिर
:
public Handler mTransactionHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
Log.d("Appname", "Transaction complete");
Log.d("Appname", "Transaction status: "+BillingHelper.latestPurchase.purchaseState);
Log.d("Appname", "Item purchased is: "+BillingHelper.latestPurchase.productId);
if(BillingHelper.latestPurchase.isPurchased()){
Log.d("Appname", "Ispurchased : " + BillingHelper.latestPurchase.productId);
if(BillingHelper.latestPurchase.productId.equals("com.paid.smallcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","30");
}
if(BillingHelper.latestPurchase.productId.equals("com.paid.medcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","85");
}
if(BillingHelper.latestPurchase.productId.equals("com..paid.midcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","175");
}
if(BillingHelper.latestPurchase.productId.equals("com.paid.maxcoinbundle")){
ConnectToServer.UpdateCoins(context,id,"add","500");
}
finish();
}
};
};
चूंकि आपने कहा था कि ऐप बिलिंग में काम करता है, हालांकि कभी-कभी उन्हें आइटम को दो बार खरीदने की ज़रूरत होती है, मुझे लगता है कि आपके पैकेज नाम सही हैं।
अगर आप इसे ठीक करने और समस्या क्या थी, तो कृपया मुझे बताएं। यह एक बहुत ही दिलचस्प विषय है।
यह वास्तव में दिलचस्प है, कोड सीधे Google नमूना कोड से लिया जाता है। यह ज्यादातर उपयोगकर्ताओं के लिए पूरी तरह से ठीक काम करता है। उनमें से कुछ मुट्ठी इस मुद्दे का अनुभव करते हैं। – the100rabh
उस स्थिति में यह शायद सिस्टम के साथ एक बग होगा। देव टीम को एक बग रिपोर्ट लिखें। मुझे खेद है कि मैं आपकी मदद नहीं कर सका। –
हाय रैंडी, मेरी मदद करने के लिए धन्यवाद :) – the100rabh
मुझे यकीन है कि क्या यह मदद मिलेगी नहीं कर रहा हूँ, लेकिन मैं अपने BillingService अग्रभूमि सेवा बनाने के लिए सिफारिश करेंगे: http://developer.android.com/guide/components/services.html#Foreground
यहाँ प्रलेखन "एपीआई का टुकड़ा एक अग्रभूमि राज्य है, जहां प्रणाली पर विचार करता है में सेवा डाल करने के लिए है यह कुछ ऐसा होता है जो उपयोगकर्ता सक्रिय रूप से जागरूक होता है और इस प्रकार स्मृति पर कम होने पर हत्या के लिए उम्मीदवार नहीं होता है। "
यह हो सकता है कि आपके उपयोगकर्ता के उस छोटे प्रतिशत में कम स्मृति की स्थिति हो और यह आपके द्वारा सेवाओं/अनुप्रयोगों को मारना शुरू कर दे)।
हाँ, कम स्मृति के बारे में आपका अधिकार। मेरा अनुमान भी है लेकिन। लेकिन इसे एक अग्रभूमि प्रक्रिया बनाना वास्तव में एक अच्छा सुझाव है। यह मदद कर सकता है। लेकिन तथ्य यह है कि पूरी प्रक्रिया केवल सेवा ही नहीं, फिर से शुरू होती है। – the100rabh
यदि आपके पास उस समय कोई अग्रभूमि गतिविधियां (या सेवाएं नहीं हैं), तो सिस्टम कम (और संभवतः) कम स्मृति स्थिति में पूरी प्रक्रिया को मार सकता है। –
प्रक्रिया में कहां मारा जा रहा है? यह आमतौर पर एंड्रॉइड मार्केट प्रसारण अधिसूचना से जाता है -> आपका बिलिंग रिसीवर ऑन रिसीव() -> बिलिंग रिसीवर बिलिंग सेवा के लिए खरीदा गया इरादा भेजता है -> बिलिंग सेवा हैंडल और खरीदी गई जानकारी अपडेट करता है। –
बात यह सुंदर यादृच्छिक है और मैं अभी तक अपने डिवाइस पर इस मुद्दे को दोबारा नहीं कर रहा हूं। यह उपयोगकर्ताओं के एक छोटे से प्रतिशत के साथ होता है, लेकिन मैं इसे किसी भी तरह से ठीक करना चाहता हूं। – the100rabh
यादृच्छिकता इसे बहुत कठिन बनाता है :) क्या आप ऐप में अधिक ट्रैकिंग जानकारी जोड़ सकते हैं? Acra एक त्रुटि ट्रैकिंग उपकरण है जो मुझे उपयोगी लगता है। साथ ही, यह आक्रामक टास्क किलर ऐप्स भी हो सकता है। –