-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
بیا این کد
package com.yazd.eyazdi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.yazd.eyazdi.until.IabHelper;
import com.yazd.eyazdi.until.IabResult;
import com.yazd.eyazdi.until.Inventory;
import com.yazd.eyazdi.until.Purchase;
public class Hem extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "kalamate yazdi";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "com.yazd.eyazdi";
// Does the user have the premium upgrade?
boolean mIsPremium = false;
// (arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;
// The helper object
IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hem);
btn1 = (Button) findViewById(R.id.button1);
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9O4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
mHelper.queryInventoryAsync(mGotInventoryListener) ;
}
});
}
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
if (result.isFailure()) {
Log.d(TAG, "Failed to query inventory: " + result);
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};
public void onUpgradeAppButtonClicked(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "qwertyuiop";
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, "qwertyuiop");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
return true;
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
return;
}
if (!verifyDeveloperPayload(purchase)) {
Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
return;
}
if (purchase.getSku().equals(SKU_PREMIUM)) {
Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
mIsPremium = true;
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
}
شناسه کالاتون با این
com.yazdi.eyazdi
که تو پنل ایجاد کردید مطابقت نداره
-
نقل قول: پرداخت درون برنامه ای
سلام دوستان کد اصلی که من نوشتم بدون حذف یا اضافه اینه ارور میده برنامه رو میبنده کد RSA برنامه رو هم چک کردم درستهpackage com.yazd.eyazdi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.yazd.eyazdi.until.IabHelper;
import com.yazd.eyazdi.until.IabResult;
import com.yazd.eyazdi.until.Inventory;
import com.yazd.eyazdi.until.Purchase;
public class Hem extends Activity {
// Debug tag, for logging
static final String TAG = "kalamate yazdi";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "com.yazd.eyazdi";
// Does the user have the premium upgrade?
boolean mIsPremium = false;
// (arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;
// The helper object
IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hem);
Button btn1 = (Button) findViewById(R.id.button1);
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwC/wOCr8z9ZCyRBHC24RC1NLNLsV61HZVcwUDUkQwIaiF82nNcJCj Zo/dodfmiYh7JHpALWOvVYZDaVPHjlWeI+GHP1D2P2XXRx2KhNHl8 mw2yI9QHt4tzz52nY+lJhwO4QVRfCT0i6sOMjKnknMjd+0iYDT/mGHmR4ef3D+blBXIPA+VvEny9nPprhntBeZHODYQ+UT3KrShF8 nHxrHuQFG+9PJeR6ok8+ZQTFKrECAwEAAQ==";
// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
mHelper.queryInventoryAsync(mGotInventoryListener) ;
}
});
}
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
if (result.isFailure()) {
Log.d(TAG, "Failed to query inventory: " + result);
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};
public void onUpgradeAppButtonClicked(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "qwertyuiop";
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, "qwertyuiop");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
return true;
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
return;
}
if (!verifyDeveloperPayload(purchase)) {
Toast.makeText(getApplicationContext(), R.string.parfaild, Toast.LENGTH_SHORT).show();
return;
}
if (purchase.getSku().equals(SKU_PREMIUM)) {
Toast.makeText(getApplicationContext(), R.string.parmof, Toast.LENGTH_SHORT).show();
mIsPremium = true;
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
}
-
نقل قول: پرداخت درون برنامه ای
دوستان خیلی ممنون مشکل حل شد
-
نقل قول: پرداخت درون برنامه ای
با سلام وقتی به اینترنت وصل باشم و دکمه پرداخت رو می زنم ارور میده و برنامه رو میبنده ولی وقتی به اینترنت وصل نباشم و دکمه رو بزنم صفحه بازار باز میشه و ارور میده که در ارتباط خطایی به وجود آمده است و بعد از این ارور اگه به اینترنت وصل بشم صفحه پرداخت رو کامل میاره عیب از کجاست؟
-
نقل قول: پرداخت درون برنامه ای
سلام دوستان
من چندتا برنامه پرداخت درون برنامه ای دانلود کردم
1- کاملترین نمونه برنامه رو میشه بهش معرفی کنید . نمیدونم بین این برنامه ها کدوم از همه کاملتر و بهتر هست
2- شنیدم دوستی میگفت اگر کسی پرداخت کنه ، در اکانت بازارش ثبت میشه و اگر با گوشی دیگر ورود کنه ، برنامه روی گوشی طرف دوباره فعال میشه . چه طوری باید جلوی چنین چیزی رو بگیرم ؟
ممنون میشم راهنمایی کنید
با تشکر
-
نقل قول: پرداخت درون برنامه ای
چگونگی تبدیل پرداخت درون برنامه ای از بازار به مایکت یا کندو؟
دوستان عزیز:
لطفا یه راهنمای کامل برای من بنویسید تا کدها داخل برنامه ای رو که یکی دیگه برای من نوشته از پرداخت درون برنامه ای بازار به مارکت ها مایکت و کندو تبدیل کنم؟
مثلا:
1- تغییرات در مانیفست برای هر مارکت چی است؟
2- کدهای عمومی رو باید در کدام فایل قرار بدهم؟
3- برای تغییر از بازار به مایکت یا کندو چه فایلی رو تغییر بدهم؟
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
mamogholi
چگونگی تبدیل پرداخت درون برنامه ای از بازار به مایکت یا کندو؟
دوستان عزیز:
لطفا یه راهنمای کامل برای من بنویسید تا کدها داخل برنامه ای رو که یکی دیگه برای من نوشته از پرداخت درون برنامه ای بازار به مارکت ها مایکت و کندو تبدیل کنم؟
مثلا:
1- تغییرات در مانیفست برای هر مارکت چی است؟
2- کدهای عمومی رو باید در کدام فایل قرار بدهم؟
3- برای تغییر از بازار به مایکت یا کندو چه فایلی رو تغییر بدهم؟
برای مایکت و ایران اپس
1 - مجوز مارکت را با بازار عوض کن
2 - کلید عمومی از پنل مارکت در برنامه قرار بده ... شناسه محصول را در مارکت همنام بازار تولید کن
3 - کلاس های پراخت درون برنامه ای بازار را پاک کن و برای مارکت مورد نظر را در برنامه قرار بده (البته فقط در یک کلاس تفاوت دارند)
برای کندو نیز و مجوز نیست اما نیاز به اضافه کردن یک کلمه در کد شما هست که در پروژه نمونه کندو یافت میشود.
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
برای مایکت و ایران اپس
1 - مجوز مارکت را با بازار عوض کن
2 - کلید عمومی از پنل مارکت در برنامه قرار بده ... شناسه محصول را در مارکت همنام بازار تولید کن
3 - کلاس های پراخت درون برنامه ای بازار را پاک کن و برای مارکت مورد نظر را در برنامه قرار بده (البته فقط در یک کلاس تفاوت دارند)
برای کندو نیز و مجوز نیست اما نیاز به اضافه کردن یک کلمه در کد شما هست که در پروژه نمونه کندو یافت میشود.
+++++++++++++=
مورد سه در کدام فایل قرار دارد و کد جایگزین چیست؟
یک کلمه کندو چیست؟ و باید به کدام فایل اضافه شود؟
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
saeidd
بله میشه مدیریت کرد، ولی باید قبلش یه سرور راه اندازی کنی
من این سیستم رو راه اندازی کردم هیچی کار خاصی با REST نمیشه کرد فقط گزارش های خرید از این دست اطلاعات رو میده .
-
نقل قول: پرداخت درون برنامه ای
سلام
من این باری که خواستم برم پرداخت درون برنامه رو یک محصول جدید بزارم 3 تا انتخاب داشتم:
1- اشتراکی ماهیانه
2- اشتراکی سالیانه
3- فروشی.
سوالم اینه که اون دوتا اشتراک ها چی هستن؟
سوال بعدیم هم یک مشورته با دوستان:
برای مثال من با 1000 تومن یک مهمات یک سلاح رو بصورت 100 در 100 در میارم. که بصورت یک محصول فروشی داخل برنامه قرار داده میشه.
بعدا دیگه با بازار کاری ندارم تا وقتی داخل برنامه این مهمات تموم بشه بعد از تموم شدن برای خرید مجدد اول خرید قبلی رو در بازار به اصتلاح consume می کنم و بعدا مجدا خرید مجددا برای خرید اقدام میکنم.
برای مدریت مصرف هم از یک وب سایت کمک میگیرم.
آیا این کار من درسته برای محصولات مصرف شدنی درسته؟
-
نقل قول: پرداخت درون برنامه ای
1 - تا حالا اشتراک ماهیانه مجله نشنیدین یا مثلا اجاره ماهانه خانه
در برنامه هم به همین شکل است ... شما برنامه خودتان را به کاربر به صورت ماهانه و سالانه اجاره می دهید.
2 - مصرف خرید باید در لحظه خرید انجام بشه که این لغت مصرف کمی گیج کننده شده است.
شما وقتی کاربر خرید را انجام داد با یک قطعه کد به بازار میگویید که ای بازار این خریدی که انجام شد از نوع مصرفی است و کاربر دوباره میتواند همین محصول را خریداری کند.
اگر این اطلاعات برای بازار ارسال نشود کاربر بعد از هر بار اتصال به بازار برای خرید مهمات هیچ پولی پرداخت نمیکند و مهمات را دریافت میکند.
-
نقل قول: پرداخت درون برنامه ای
مرسی.
این بازار با این مستنداتش ادم رو گمراه میکنه به خصوص برای من که دارم از سورس جاوا برای سی شارپ خودم یک کتاب خانه پرداخت درون برنامه می سازم.
مشکل من دیقیقا با این حرف بازار هست:
نقل قول:
مصرف خرید
وقتی محصولی خریداری شد، به عنوان «دارایی تحت تملک» آن کاربر تلقی شده و نمیتواند دوباره توسط آن کاربر خریداری شود. شما باید درخواست مصرف محصول را برای آنکه بازار امکان خریداری مجدد آن را فراهم کند، بفرستید. چگونگی اجرای مکانیزم مصرف در برنامهتان بستگی به خودتان دارد. معمولا، شما محصولات موقتی و مصرفی (برای مثال سکه یا ابزار درون بازی) میفروشید که فروش چندینبارهٔ آن معنیدار است. برای محصولاتی که تنها یکبار فروخته میشوند و اثری دائمی دارند (مانند ارتقا دادن به نسخه کامل برنامه) مصرف را صدا نزنید.
پس برای محصولات فروشی (مصرف شدنی) در موقع خرید باید به بازار اعلام شود. خوب حالا اگر کاربر هنوز از تمام مهمات خود استفاده نکرده بود مثلا 20% باقی مانده داشت و مجددا اقدام به خرید کرد. کاربر 20% از نظر مالی ضرر خواهد کرد! این اتقاق خواهد افتاد یا اینکه بازار تا اتمام کامل(تا وقتی که برنامه به بازار اعلام کند بسته خریداری شده تمام شده است) از خرید ممانعت به عمل می آورد؟!
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
c0mmander
مرسی.
این بازار با این مستنداتش ادم رو گمراه میکنه به خصوص برای من که دارم از سورس جاوا برای سی شارپ خودم یک کتاب خانه پرداخت درون برنامه می سازم.
مشکل من دیقیقا با این حرف بازار هست:
پس برای محصولات فروشی (مصرف شدنی) در موقع خرید باید به بازار اعلام شود. خوب حالا اگر کاربر هنوز از تمام مهمات خود استفاده نکرده بود مثلا 20% باقی مانده داشت و مجددا اقدام به خرید کرد. کاربر 20% از نظر مالی ضرر خواهد کرد! این اتقاق خواهد افتاد یا اینکه بازار تا اتمام کامل(تا وقتی که برنامه به بازار اعلام کند بسته خریداری شده تمام شده است) از خرید ممانعت به عمل می آورد؟!
میگم این لغت مصرف کردن گیج کننده برای همین میگم
بازار اصلا به برنامه شما یا کاربر چقدر مهمات داره و ... کاری نداره.
وقتی کاربر 100 سکه خریداری میکنه و 60 تا را مصرف میکنه اینها همه فقط برنامه شما از آن اطلاع داره و بازار کاری به این چیزا نداره
شما تو کد برنامه تون قرار دادی که اگر کاربر 1000 تومان هزینه کرد 100 سکه بهش بدی. اگر کاربر 60 سکه داشت و دوباره خرید کرد تعداد سکه ها میشه 160 تا. بازار فقط اینجا پرداخت را مدیریت میکنه نه تعداد سکه ها و تمام شدن آنها را.
شما در برنامه یک متغییر از نوع Integer قرار میدی و هر بار بعد از خرید int +=100 میکنی تا هر بار 100 سکه اضافه بشه و مقدار را ذخیره کنه
برای اتمام سکه هم از یه دستور if استفاده میکنی و میگی که مثلا اگر تعداد کوچکتر و مساوی صفر بود صفحه خرید سکه را بالا بیار.
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
میگم این لغت مصرف کردن گیج کننده برای همین میگم بازار اصلا به برنامه شما یا کاربر چقدر مهمات داره و ... کاری نداره. وقتی کاربر 100 سکه خریداری میکنه و 60 تا را مصرف میکنه اینها همه فقط برنامه شما از آن اطلاع داره و بازار کاری به این چیزا نداره شما تو کد برنامه تون قرار دادی که اگر کاربر 1000 تومان هزینه کرد 100 سکه بهش بدی. اگر کاربر 60 سکه داشت و دوباره خرید کرد تعداد سکه ها میشه 160 تا. بازار فقط اینجا پرداخت را مدیریت میکنه نه تعداد سکه ها و تمام شدن آنها را. شما در برنامه یک متغییر از نوع Integer قرار میدی و هر بار بعد از خرید int +=100 میکنی تا هر بار 100 سکه اضافه بشه و مقدار را ذخیره کنه برای اتمام سکه هم از یه دستور if استفاده میکنی و میگی که مثلا اگر تعداد کوچکتر و مساوی صفر بود صفحه خرید سکه را بالا بیار.
دمت گرم .بالاخره پیاده سازیش کردم. با کمکت کاملا متوجه شدم که چرا باید بلافاصله بعد از خرید قسمت های مصرفی consume بودن خرید را به بازار گفت. و تمام مدریت خرید با برنامه هست. البته عنوان بسته های غیر مصرفی خریداری شده هم برای برنامه میتونه ارسال کنه و همین طور مشخصات محصول رو بصورت json که اونم خیلی در نوع خودش خوبه. بازم یک دنیا تشکر ازت به خاطر راهنماییت.
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
1 -
شما وقتی کاربر خرید را انجام داد با یک قطعه کد به بازار میگویید که ای بازار این خریدی که انجام شد از نوع مصرفی است و کاربر دوباره میتواند همین محصول را خریداری کند.
صرف اینکه با اون قطعه کد به بازار بگیم این خرید از نوع مصرفی است که نیست، در واقع ما با کد:
mHelper.consumeAsync(Purchase, mConsumeFinishedListener);
به بازار میگیم که این خریدی که انجام شد رو صفرش کن؛ و صفر که شد، دیگه محصولی خریداری شده ای وجود نداره که کاربر بخواد مالک اون باشه. بنابراین دوباره میتونه اون رو بخره
-
نقل قول: پرداخت درون برنامه ای
سلام
متغیر payload رو برای یک پرداختی که فقط قراره برنامه رو Premium کنه چطور باید مقداردهی کنیم تا ایده آل ها حفظ شوند؟
/*
* TODO: verify that the developer payload of the purchase is correct.
* It will be the same one that you sent when initiating the purchase.
*
* WARNING: Locally generating a random string when starting a purchase
* and verifying it here might seem like a good approach, but this will
* fail in the case where the user purchases an item on one device and
* then uses your app on a different device, because on the other device
* you will not have access to the random string you originally
* generated.
*
* So a good developer payload has these characteristics:
*
* 1. If two different users purchase an item, the payload is different
* between them, so that one user's purchase can't be replayed to
* another user.
*
* 2. The payload must be such that you can verify it even when the app
* wasn't the one who initiated the purchase flow (so that items
* purchased by the user on one device work on other devices owned by
* the user).
*
* Using your own server to store and verify developer payloads across
* app installations is recommended.
*/
این بخش در قسمت کامنت های برنامه trivial Drive بود. اما من نمیدونم چطور باید generate کنم تا ملاک هایی که گفته برقرار باشند..!!
ممنون میشم راهنماییم کنین...
-
1 ضمیمه
نقل قول: پرداخت درون برنامه ای
سلام دوستان
داشتم پرداخت درون برنامه ای رو پیاده سازی میکردم و به ی نکته ساده پی بردم که چون رعایت نکرده بودم کارم سخت شده بود
اونم اینه که حتما IInAppBillingService.aidl در پوشه com/android/vending/billing قرار بدید.
فولدر util رو هم در فولدر پروژه قرار بدید و در هر یک از کلاسهای داخلش حتما اسم پکیج رو تصحیح کنید . مثلا طبق عکس باید بشه package com.hamid.util;
ضمیمه 127940
و اگر از Proguard برای مبهم کردن کد استفاده میکنید،به فایل proguard-project.txt خط زیر را باید اضافه کنید:
keep class com.android.vending.billing
جاداره از دوستمون hamedjj که این پروژه رو آماده کردن هم تشکر کنم https://github.com/hamedjj/BazaarInAppBilling
-
نقل قول: پرداخت درون برنامه ای
نمی دونم جاش اینجا درسته بپرسم یا نه .. شایدم سوالم خیلی ابتدایی باشه ، شما به بزرگی خودتون ببخشین
خب سوال اینه
من توی eclips یه برنامه درون پرداختی نوشتم و بدون هیچ مشکلی هم انجام شد .. اما الان رفتم توی android studio .. راستش یکم گیر افتادم ..
اضافه کردن فایلاش مثل eclips نیست .. بازار میگه باید اینکار رو انجام بدم :
فایل AIDL را در پروژه خود قرار داده و از ابزار Ant برای build کردن پروژه خود استفاده کنید
خب اینو نمی دونم چیه .. دقیقن باید چیکار کنم ؟!با ant کار نکردم تا الان .. این همون اپاچی میشه ؟
-
نقل قول: پرداخت درون برنامه ای
من برنامه ام رو با پرداخت درون برنامه ای نوشتم و روی گوشیه خودم xperia z , android 4.4 درست کار میکنه. برای بازار فرستادم اما پیغام داده که پرداخت درون برنامه ای روی Huawei G750 با اندروید ۴.۲.۲ مشکل داره!
از دوستان کسی با همچین مشکلی برخورد داشته؟ ضمنا من از proguard هم استفاده کردم
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
HAMID484
من برنامه ام رو با پرداخت درون برنامه ای نوشتم و روی گوشیه خودم xperia z , android 4.4 درست کار میکنه. برای بازار فرستادم اما پیغام داده که پرداخت درون برنامه ای روی Huawei G750 با اندروید ۴.۲.۲ مشکل داره!
از دوستان کسی با همچین مشکلی برخورد داشته؟ ضمنا من از proguard هم استفاده کردم
https://github.com/congenialmobile/T...rive/issues/1#
-
نقل قول: پرداخت درون برنامه ای
سلام
من کدها رو داخل اکتیویتی مربوط به خریدم ک\ی کردم همه خطاها رو هم برطرف کردم ولی نمیدونم چرا اون قسمتی از کدها که کلاس Inventory رو باید بخونه نمیخونه و از کد زیر خطا میگیره:
mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory)
که قسمت QueryInventoryFinishedListener و inventory رو کلا نمیشناسه و خطا میده
چطوری باید رفعش کنم؟!
ویرایش: کتابخونه مربوط به کلاس inventory رو ایم\ورت نکرده بودم ولی ارور هم نمیداد ایم\ورت کردم خطا رفع شد ممنون
-
نقل قول: پرداخت درون برنامه ای
سلام
من این پرداخت درون برنامه ای پیاده سازی کردم
موقع رفتن به اکتیویتی که داخل اون پرداخت انجام میشه چک میکنم که اگه بازار نصب بود به اکتیویتی پرداخت بره و در اونجا کارای پرداخت انجام بشه در غیر این صورت Toast میگه اول باید بازار نصب کنید .
همه چیز درست کار میکنه ولی اگه بازار نصب نباشه و بعد از برنامه ، بازار نصب کنیم اجازه ورود به اکتیویتی پرداخت داده میشه ولی با ورود کرش میکنه !
یعنی حتما باید اول بازار نصب کرد و بعدش برنامه ! اینم خطی که داخل اکتیویتی پرداخت کرش میکنه :
کد HTML:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
مشکل چیه ؟
با تشکر
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
doost_fu
سلام
من این پرداخت درون برنامه ای پیاده سازی کردم
موقع رفتن به اکتیویتی که داخل اون پرداخت انجام میشه چک میکنم که اگه بازار نصب بود به اکتیویتی پرداخت بره و در اونجا کارای پرداخت انجام بشه در غیر این صورت Toast میگه اول باید بازار نصب کنید .
همه چیز درست کار میکنه ولی اگه بازار نصب نباشه و بعد از برنامه ، بازار نصب کنیم اجازه ورود به اکتیویتی پرداخت داده میشه ولی با ورود کرش میکنه !
یعنی حتما باید اول بازار نصب کرد و بعدش برنامه ! اینم خطی که داخل اکتیویتی پرداخت کرش میکنه :
کد HTML:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
مشکل چیه ؟
با تشکر
با این کار امنیت برقرار نمیشه دوست من
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
golbafan
با این کار امنیت برقرار نمیشه دوست من
من این کارو برا امنیت انجام نمیدم
می خوام اگه احتمالا بازار نصب نبود موجب خطا و کرش نشه به همین دلیل خواستم اول نصب بودن چک کنم که مشکل بالا وجود داره دلیلش هم پیدا کردم سینک نبودن queryInventoryAsync هست و میشه یه try/cach گذاشت و از کاربر درخواست نصب مجدد برنامه رو داد ولی چطور میشه بدون نصب مجدد این مشکل حل کرد ؟ نمیدونم !
بازم ممنون
-
نقل قول: پرداخت درون برنامه ای
.................................................. .........
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
doost_fu
سلام
من این پرداخت درون برنامه ای پیاده سازی کردم
موقع رفتن به اکتیویتی که داخل اون پرداخت انجام میشه چک میکنم که اگه بازار نصب بود به اکتیویتی پرداخت بره و در اونجا کارای پرداخت انجام بشه در غیر این صورت Toast میگه اول باید بازار نصب کنید .
همه چیز درست کار میکنه ولی اگه بازار نصب نباشه و بعد از برنامه ، بازار نصب کنیم اجازه ورود به اکتیویتی پرداخت داده میشه ولی با ورود کرش میکنه !
یعنی حتما باید اول بازار نصب کرد و بعدش برنامه ! اینم خطی که داخل اکتیویتی پرداخت کرش میکنه :
کد HTML:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
مشکل چیه ؟
با تشکر
سلام، بر روی گوشی واقعی تست کنید. مشکلی وجود نداره.
-
نقل قول: پرداخت درون برنامه ای
سلام تا جایی که من متوجه شدم برنامه هر بار که اجرا میشه برای اینکه تشخیص بده کاربر اکتیو هست یا نه نیاز به اینترنت داره آیا راه حلی هست که نیازی به اینترنت نداشته باشد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
سلام تا جایی که من متوجه شدم برنامه هر بار که اجرا میشه برای اینکه تشخیص بده کاربر اکتیو هست یا نه نیاز به اینترنت داره آیا راه حلی هست که نیازی به اینترنت نداشته باشد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
سلام
یک فیلد در دیتابیس به این کار اختصاص بده. یا از فایل xml استفاده کن
مثلا وقتی میخوای وارد اکتیویتی مورد نظر بشی اون مقدار رو چک کن و اگر صفر بود کاربر رو بفرست به اکتیویتی پرداخت. اگر اینترنت داشت که پرداخت میکنه اگر هم به اینترنت وصل نبود یا پرداختی انجام نداد اون فیلد همچنان صفر می مونه
دفعه بعد که کاربر بخواد بره به اون اکتیویتی چون اول مقدار فیلد چک میشه , اگر فیلد 1 شده بود دیگه نیازی به تشخیص نداره و اکتیویتی رو به کاربر نشون میده
ی نکته ای که خودم با هاش مواجه شدم اینه که بهتره خیلی رو قضیه پرداخت کاربر سخت گیری نشه
من خودم تو برنامم هر بار که طرف میرفت تو صفحه گزارشات نرم افزار , اگه اینترنت داشت یک کوءری میزدم به بازار تا خریدش رو چک میکردم که اگه مشکلی بود دوباره برنامه قفل بشه. رو گوشی خودم که اکسپریا z هست مشکلی نبود اما بعد چند وقت بعضی کاربرا گفتن که خطا میده و این حرفا , منم اون چک کردن رو برداشتم و برنامه براشون درست اجرا شد.ینی دفعه اول که کاربر برنامه رو خرید اون فیلد رو 1 کردم
خیلی از برنامه ها مثل افتابه از روش های خیلی ساده ی فایل xml استفاده کردن که اگه گوشی تون روت باشه براحتی میتونی سکه ها رو افزایش بدی. اما افتابه برنامه موفق و پر فروشی بوده چون طراحی و ایده خوبی داشته
اینا رو واسه این میگم که خیلی خودتون رو درگیر امنیت پرداخت درون برنامه ای نکنید چون برنامه ها همگی در حد یکی دو تومن هستن و مشتری هم یا پول میده یا نمیده. انگشت شمارن اونایی که بخوان پرداخت درون برنامه ای رو دور بزنن یا برنامه رو کرک کنن که اونم چیزی نیست که بتونه خطرناک باشه.
موفق باشید
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
unit001
سلام دوستان
کسی هست که در مورد پرداخت درون برنامه ای منو راهنمایی کنه؟
از آموزش های بازار زیاد سر در نیاوردم.
ممنون
با تشکر از کاربر عزیز
hamed_hossani که این فیلم ها رو در اختیار گذاشتن:تشویق:
حیف که این فیلم ها مخصوص basic 4 android بودند...
-
نقل قول: پرداخت درون برنامه ای
سلام
دوستان عزیز وقتی بنده به بازار متصل میشوم و محصولی خرید میکنم، پس از اتمام خرید برنامه ی من بسته می شود و دوباره خودکار اجرا میشود.
هیچ اطلاعات برگشتی توسط برنامه دریافت نمی شود!!
مشکل از کجاست؟
تراکنش در پنل بازار به طور کامل ثبت شده اما بنده نمی توانم این محصول خریده شده را مصرف کنم.:متفکر:
لطفا راهنمایی کنید
با تشکر
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hoseinoo
سلام
دوستان عزیز وقتی بنده به بازار متصل میشوم و محصولی خرید میکنم، پس از اتمام خرید برنامه ی من بسته می شود و دوباره خودکار اجرا میشود.
هیچ اطلاعات برگشتی توسط برنامه دریافت نمی شود!!
مشکل از کجاست؟
تراکنش در پنل بازار به طور کامل ثبت شده اما بنده نمی توانم این محصول خریده شده را مصرف کنم.:متفکر:
لطفا راهنمایی کنید
با تشکر
برای مصرف خرید شما باید بعد از اتمام خرید به بازار بفهمانید که این خرید قابل مصرف است .
بریا این کار باید متد مصرف خرید را در برنامه قرار دهید و در تابع اتمام خرید (IabHelper.OnIabPurchaseFinishedListener) آن را صدا بزنید
به کدهای برنامه Trivial Drive دقت کنید :
// Callback for when a purchase is finished
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
// if we were disposed of in the meantime, quit.
if (mHelper == null) return;
if (result.isFailure()) {
complain("Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
return;
}
Log.d(TAG, "Purchase successful.");
if (purchase.getToken().equals(token)) {
// bought 1/4 tank of gas. So consume it.
Log.d(TAG, "Purchase is gas. Starting gas consumption.");
mHelper.consumeAsync(purchase, mConsumeFinishedListener);
}
}
};
کد مصرف خرید :
// Called when consumption is complete
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
Log.d(TAG, "Consumption finished. Purchase: " + purchase + ", result: " + result);
// if we were disposed of in the meantime, quit.
if (mHelper == null) return;
// We know this is the "gas" sku because it's the only one we consume,
// so we don't check which sku was consumed. If you have more than one
// sku, you probably should check...
if (result.isSuccess()) {
// successfully consumed, so we apply the effects of the item in our
// game world's logic, which in our case means filling the gas tank a bit
Log.d(TAG, "Consumption successful. Provisioning.");
updateUI();
}
else {
complain("Error while consuming: " + result);
Toast.makeText(getApplicationContext(), "Consome Not Ready", Toast.LENGTH_SHORT).show();
}
Log.d(TAG, "End consumption flow.");
}
};
-
1 ضمیمه
نقل قول: پرداخت درون برنامه ای
پروژه پرداخت درون برنامه ای - مصرفی :
( غیر قابل Patch شدن توسط برنامه LuckyPatcher )
اگر کسی توانست با برنامه LuckyPatcher این برنامه را Patch کند خواهشا اطلاع رسانی کند.
لینک دانلود فایل سورس و برنامه 1
لینک دانلود فایل سورس و برنامه 2
-
نقل قول: پرداخت درون برنامه ای
سلام دوستان من مشکل پیدا کردم واسه نصب یک نرم افزار رو گوشیم...کسی اطلاع داره چه باید کرد ...ارورش هست:
class java.io.ioexception failed to find package name
فکر کنم به جاوا ربط داره
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
کار نمیکنه ... پرداخت انجام میشه ظاهرا اما نه پولی اظافه میکنه و نه پولی کم میکنه
توکن نمیاد
پیغام زیر رو میده ولی انجام نمیشه
Ready for Consome
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
Abbas Naghdi
کار نمیکنه ... پرداخت انجام میشه ظاهرا اما نه پولی اظافه میکنه و نه پولی کم میکنه
توکن نمیاد
پیغام زیر رو میده ولی انجام نمیشه
Ready for Consome
ممنون از اینکه برنامه را تست کردید
چطوریه پرداخت انجام میشه و در بازار توکن ثبت نمیشه . نه پولی دریافت میشه و نه پولی کم میشه؟؟!!
با این برنامه یه عکس متحرک از امولاتور خودت بگیر تا بررسی کنم
http://www.bahraniapps.com/apps/gifcam/GifCam.zip
سپاس
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
ممنون از اینکه برنامه را تست کردید
چطوریه پرداخت انجام میشه و در بازار توکن ثبت نمیشه . نه پولی دریافت میشه و نه پولی کم میشه؟؟!!
با این برنامه یه عکس متحرک از امولاتور خودت بگیر تا بررسی کنم
http://www.bahraniapps.com/apps/gifcam/GifCam.zip
سپاس
من برنامه رو تو گوشی واقعی تست کردم پچ نمیشه اما لاکی پچر میاد وسط یکم سر در بیاری میشه پچ کذد به احتما زیاد
اینم لینک فیلم
http://s6.picofile.com/file/81936530...B7_1_.mp4.html
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
stranger!!!!
دستت درد نکنه که همکاری کردی
برنامه کاملا درست کار میکنه
از api خو بازار هم استفاده کنید به همین شکل درمیاد.
اگر همه این قابلیت را پیاده سازی کنند دیگه این برنامه بلا استفاده میشه و همه از دستگاه خودشون حذف میکنند.
-
نقل قول: پرداخت درون برنامه ای
خواهش برادر من اما من برای این مساله ی راه حل دیگه دارم که کامل نتیجه بگیرم حتما میزارمش اما فعالا درگیر ی مشکل تو برنامه هستم تا ببینم خدا چی میخواد
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
ممنون از اینکه برنامه را تست کردید
چطوریه پرداخت انجام میشه و در بازار توکن ثبت نمیشه . نه پولی دریافت میشه و نه پولی کم میشه؟؟!!
با این برنامه یه عکس متحرک از امولاتور خودت بگیر تا بررسی کنم
http://www.bahraniapps.com/apps/gifcam/GifCam.zip
سپاس
آقا ببخشید با سمپل خودت زدم دوستومن کم شد از حسابم درسته .
مشکل برنامه من بود که درستش کردم ... یه دنبا ممنون
اگه میخوای کاملش کنی اینترنت و نصب بودن بازار و نصب بودن لاکی رو چک کن شاید بعضیا بلد نباشن ... یه دنیا ممون دوست من
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
همه چیز بر میگرده به این دو قسمت :
public void onUpgradeAppButtonClicked(View arg0) {
Log.d(TAG, "Upgrade button clicked; launching purchase flow for upgrade.");
setWaitScreen(true);
/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "qwertyuiop";
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, "qwertyuiop");
}
کد بالا وقتی بر روی دکمه کلیک کرد premium بودن او را جستجو می کند
اگر premium بود میره به قسمت پایین برنامه updateUi
public void updateUi() {
if (mIsPremium) {
// update the car color to reflect premium status or lack thereof
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this, Page2.class);
startActivity(intent);
}
});
}
}
و برنامه آپدیت میشه
البته تو او کدی که قرار دادم قسمت updateui اشتباه داشت که if قرار نداده بودم و فقط یک بار باز میکرد
احتمالا بعدا کاملا درست می کنم
دوست عزیز یه سوال اونوقت تو کلاس های دیگه چطور باید به اکتیویتی بفهمونیم که اگه کاربر پریمم بود این کار رو بکن و اگه نبود این کارو؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
-
نقل قول: پرداخت درون برنامه ای
سلام دوستان من با xamarin برنامه نویسی میکنم بهترین راه پرداخت برنامه چی هست ؟
-
نقل قول: پرداخت درون برنامه ای
آقا در نهایت کد اکتیویتی پرداخت درون برنامه ای رو چطور بنویسیم که لاکی فریبش نده ؟
جز سرور که زیاد وارد نیستیم.
-
نقل قول: پرداخت درون برنامه ای
سلام
دوستان ميشه نحوه پرداخت درون برنامه اي رو در فون گپ توضيح بديد
نياز دارم :))))))))))
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
kh26127
سلام
دوستان ميشه نحوه پرداخت درون برنامه اي رو در فون گپ توضيح بديد
نياز دارم :))))))))))
سورس همراه با آموزش در این لینک موجود است :
https://github.com/poiuytrez/AndroidInAppBilling
در این قسمت میتوانید مشکلات خودتان را مطرح کنید یا از تجربه دیگران ر پیاده سازی این سرویس استفاده کنید
https://github.com/poiuytrez/AndroidInAppBilling/issues
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
هنوز نديدم ولي تشكر كه پاسخ داديد :)
-
نقل قول: پرداخت درون برنامه ای
سلام واسه پرداخت درون برنامه ای کالای غیر مصرفی کسی میت.مه راهنمای کنه؟
-
نقل قول: پرداخت درون برنامه ای
با سلام خدمت آقا حامد و بقیه دوستان گل
برنامه ای آماده کردم و خرید درون برنامه ای شم با کمک آموزش های خوب این تایپیک راه اندازی کردم ، حالا توی یه چیزی موندم .
چطور اطلاعات کاربری که خرید میکنه رو از بازار دریافت کنم ؟ نام یوزری که با اون خرید انجام میشه رو لازم دارم
این کار رو برای این لازم دارم که بتونم هر کاربر رو محدود کنم به اینکه که در بیش از 3 تا گوشی نتونه با یک خرید برنامه رو به حالت طلائی برسونه . (در صورت نیاز به بیش از 3 گوشی دوباره خرید کنه)
با تشکر از همه دوستانی که با تجربیاتشون منو راهنمائی میکنن
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedg1366
با سلام خدمت آقا حامد و بقیه دوستان گل
برنامه ای آماده کردم و خرید درون برنامه ای شم با کمک آموزش های خوب این تایپیک راه اندازی کردم ، حالا توی یه چیزی موندم .
چطور اطلاعات کاربری که خرید میکنه رو از بازار دریافت کنم ؟ نام یوزری که با اون خرید انجام میشه رو لازم دارم
این کار رو برای این لازم دارم که بتونم هر کاربر رو محدود کنم به اینکه که در بیش از 3 تا گوشی نتونه با یک خرید برنامه رو به حالت طلائی برسونه . (در صورت نیاز به بیش از 3 گوشی دوباره خرید کنه)
با تشکر از همه دوستانی که با تجربیاتشون منو راهنمائی میکنن
بازار همچین اطلاعاتی را به شما نمیدهد.
باید شناسه دستگاه را در سرور خودتان بعد از پرداخت موفق ثبت کنید و فقط برای آن دستگاه برنامه را فعال کنید که این روش فقط برای 1 دستگاه عملی است
برای اینکه به 3 دستگاه محدود کنی باید یوزر را خودتان در سرور خودتان ایجاد کنید و از کاربر موقع پرداخت از یوزر بازارش استفاده نکند.
API توسعه دهندگان هم به همین منظور ایجاد شده است.
https://cafebazaar.ir/developers/doc...oper-api/?l=fa
-
نقل قول: پرداخت درون برنامه ای
-
نقل قول: پرداخت درون برنامه ای
با سلامی دوباره
حامد جان بابت برنامه ای که قرار دادی و همه زحماتی که میکشی تشکر میکنم ازت.
در صورت امکان لطفا پروژه محصولات غیر مصرفی که غیر قابل پچ شدن توسط لاکی هست رو هم توی همین تایپیک قرار بده ، (دسترسی به سایت های vip ندارم متاسفانه)