-
نقل قول: پرداخت درون برنامه ای
شرمنده این برنامه نهایی رو تو همون برنامه ارسال نسخه جدید بفرستم یا نه ... کلا یه برنامه دیگه ارسال کنم؟
بعد فرمودین تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...
ممنونم ازت آقا امین
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
برای اینکه یه کاربر نتونه نسخه کامل برنامه خرید شده رو در بیش از یه دستگاه نصب کنه، من با استفاده از توابع API که بازار ارائه میده، کدهای سمت کلاینتش رو نوشتم، ولی مشکل اینه که ظاهرا بازار کاری به این مساله نداره، یعنی وقتی با استفاده از تابع:
1
2 |
mHelper.launchPurchaseFlow(PurchaseApp.this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
|
کاربر به صفحه خرید هدایت میشه، بازار چک می کنه می بینه این کاربر قبلا این محصول رو خریداری کرده و براش فرقی نمی کنه که در این دستگاه بوده یا نه، بنابراین اجازه خرید مجدد نمیده و از اکتیویتی میاد بیرون و نتیجه «خرید موفق» رو بر می گردونه.
از دوستان کسی راه حلی برای این مساله داره؟
کاربر باید بتونه نسخه کاملی که خریداری کرده را در بیش از یک دستگاه نصب کنه و بازار در این قضیه کاملا درست عمل میکنه.
منی که دوتا تبلت و 1 گوشی دارم یعنی چند بار باید یه برنامه را خریداری کنم!!!!
-
نقل قول: پرداخت درون برنامه ای
شرمنده این برنامه نهایی رو تو همون برنامه ارسال نسخه جدید بفرستم یا نه ... کلا یه برنامه دیگه ارسال کنم؟
این برنامه که تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...
دوستان کسی نیست جواب بده ؟؟؟
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
کاربر باید بتونه نسخه کاملی که خریداری کرده را در بیش از یک دستگاه نصب کنه و بازار در این قضیه کاملا درست عمل میکنه.
منی که دوتا تبلت و 1 گوشی دارم یعنی چند بار باید یه برنامه را خریداری کنم!!!!
آقا حامد حرف شما کاملا درست و متینه، خب اینو میشه مدیریت کرد. مثلا میشه اجازه داد هر کاربری نسخه کامل برنامه رو در 3 یا 5 دستگاه نصب کنه. حرف سر اینه که فعلاً بازار ساز و کاری برای مدیریت این مساله نداره. اگه مثل getpurchases، یه متدی وجود داشت که خرید های کاربر رو میداد (حتی اونهایی که بعدا مصرف شدن) قضیه حل بود. این API توسعه دهندگان هم که همین دیروز سه شنبه 25 آذر اضافه کرده، خیلی چیز خوبیه ولی خب لازمه اش راه اندازی سرور شخصی هستش.
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
hamedjj
کاربر باید بتونه نسخه کاملی که خریداری کرده را در بیش از یک دستگاه نصب کنه و بازار در این قضیه کاملا درست عمل میکنه.
منی که دوتا تبلت و 1 گوشی دارم یعنی چند بار باید یه برنامه را خریداری کنم!!!!
مشکل از اینجایی آب میخوره که یک نفر حساب خودش رو 100 نفر که هر کدوم دارای گوشی تبلت هر وسیله دیگه هستن میده!
البته با توجه به این قابلیت REST که همون ارسال http و دریافت پاسخ هست احتمالا بشه این قضیه رو مدریت کرد.
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
c0mmander
البته با توجه به این قابلیت REST که همون ارسال http و دریافت پاسخ هست احتمالا بشه این قضیه رو مدریت کرد.
بله میشه مدیریت کرد، ولی باید قبلش یه سرور راه اندازی کنی
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
mohmir
شرمنده این برنامه نهایی رو تو همون برنامه ارسال نسخه جدید بفرستم یا نه ... کلا یه برنامه دیگه ارسال کنم؟
بعد فرمودین تستش کنم خوب این برنامه که هنوز بررسی و منتشر نشده و در وضعیت برنامه بارگذاری شده و آمادهٔ بررسی است .... من چجور نصبش کنم و تستش کنم ...
ممنونم ازت آقا امین
سلام.
آره تو همون برنامه به عنوان نسخه جدید ارسالش کن.فقط یادت نره تو فایل منیفست ورژن برنامه رو یکی بالا ببری.
نه برنامه جدید نباید ارسال کنی.
هنوز تایید نشده یعنی هنوز در دسترس مردم قرارش نمیدن.
شما که خودت برنامه نویسش هستی.
همین فایل apk که آپلود کردی رو تو گوشیت نصب کن و امتحان کن.
پرداخت درون برنامه ای نیازی به تایید شدن نهایی نرم افزار نداره تا برنامه نویس بتونه قبل از اینکه برنامش منتشر بشه قابلیت درون پرداختش رو تست کنه.
فایل نهایی که ساختی و کلید RSA و کد محصول توشه رو تست کن.
مهم نیست برنامه هنوز بررسی شده یا نه ..
-
نقل قول: پرداخت درون برنامه ای
راجع به پرداخت درون برنامه در یونیتی
سلام به همه بزرگواران
دوستانمون خیلی خوب راهنمایی کردن ولی به دلیل مشکلات ذاتی سیستم پرداخت درون برنامه ای، پیاده سازی این مورد یه مقدار نیاز به صرف وقت و حوصله داره، ما خیلی روی این قضیه کار کردیم و تونستیم یه پکیج آماده کنیم که توسط اون به همراه آموزشی که مهیا ساختیم خیلی راحت و سریع میشه برنامه هایی که با یونیتی ساخته شدن رو به پرداخت درون برنامه ای مجهز کرد؛ ولی متأسفانه چون بیش از یک ماه درگیر این کار بودیم و این کار برامون هزینه بر بود نمیتونیم به رایگان در اختیار شما عزیزان قرار بدیم، عذر خواهی می کنیم، در صورتی که نتونستید یا به هر دلیل نخواستین خودتون درگیر این موضوع تو برنامه تون بشین میتونید توسط ایمیل زیر با من در ارتباط باشید.
akf1372@gmail.com
موفق و پیروز باشین..
-
نقل قول: پرداخت درون برنامه ای
کاربران عزیز خواهشا در وهله اول مستندات را به طور کامل مطالعه کنید و اگر قادر به پیاده سازی api نبودید هزینه کنید
چون مستندات و فیلم های آموزشی و ... درباره پیاده سازی api پرداخت درون برنامه ای یونیتی در اینترنت بسیار بسیار فراوان میباشد
موفق باشید
-
نقل قول: پرداخت درون برنامه ای
با سلام من این کد های رو نوشتم ولی ارور فورز کلوز میده عیب از کجاست؟;
import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;
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;
public class Hem extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "hkgik";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "khgbjg";
// 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.par);
btn1 = (Button) findViewById(R.id.button1);
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEsV61HZVcwUDUkQwIaiF82nNcJC jZo/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;
}
}
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
با سلام من این کد های رو نوشتم ولی ارور فورز کلوز میده عیب از کجاست؟
;
import util.IabHelper;
import util.IabResult;
import util.Inventory;
import util.Purchase;
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;
public class Hem extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "hkgik";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "khgbjg";
// 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.par);
btn1 = (Button) findViewById(R.id.button1);
String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEsV61HZVcwUDUkQwIaiF82nNcJC jZo/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 ضمیمه
نقل قول: پرداخت درون برنامه ای
با سلام خدمت توسعه دهندگان
پرداخت درون برنامه ای از اهمیت فراوانی برخوردار میباشد به طوری که نزدیک به 80% از پرداخت های مارکت گوگل پلی از این طریق انجام می شود.
با وجود اینکه آموزش پیاده سازی سیستم پرداخت درون برنامه ای بازار در این تاپیک قرار داده شده اما باز هم شاهد این هستیم که کاربرانی قادر به پیاده سازی این سیستم در برنامه های خود نیستند و پیام های متعددی برای بنده ارسال میکنند و خواستار پیاده سازی این سرویس برای برنامه هایشان هستند.
پیشنهاد ما به شما این است که در وهله اول مستندات بازار و پروژه های نمونه پرداخت درون برنامه ای را کاملا مطالعه کنید.
اگر باز هم شما قادر به پیاده سازی این سیستم در برنامه خود نیستید و تمایل دارید که برنامه های خود را با پرداخت درون برنامه ای در مارکت های اندرویدی منتشر کنید می توانید با ایمیل زیر تماس بگیرید و در ازای دریافت مبلغی بنده این سیستم را در برنامه شما پیاده سازی یا به صورت شخصی سازی شما مطابق با نیازهای برنامه شما طراحی نمایم.
هزینه پیاده سازی سرویس ها :
ارتقا برنامه : 100 هزار تومان
محصولات مصرفی : 120 هزار تومان
سرویس اشتراک : 120 هزار تومان
(برای پیاده سازی های به صورت شخصی سازی شده قیمت با مکاتبه با توسعه دهنده اعلام می شود)
ایمیل :
hamed_daneshnia@yahoo.com
-
نقل قول: پرداخت درون برنامه ای
من روی گوشی امتحان میکنم و بازار روی گوشیم نصبه
-
نقل قول: پرداخت درون برنامه ای
با سلام من این کدها رو نوشتم حالا وارد اکتیویتی میشه ولی وقتی دکمه پرداخت رو میزنم برنامه رو میبنده
بازار روی گوشیم نصبهpackage com.i;
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.i.until.IabHelper;
import com.i.until.IabResult;
import com.i.until.Inventory;
import com.i.until.Purchase;
public class Hem extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "ka zdi";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "com.i";
// 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+GHP1D2P2Mjd+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;
}
}
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
با سلام من این کدها رو نوشتم حالا وارد اکتیویتی میشه ولی وقتی دکمه پرداخت رو میزنم برنامه رو میبنده
بازار روی گوشیم نصبه
package com.i;
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.i.until.IabHelper;
import com.i.until.IabResult;
import com.i.until.Inventory;
import com.i.until.Purchase;
public class Hem extends Activity {
Button btn1;
// Debug tag, for logging
static final String TAG = "ka zdi";
// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "com.i";
// 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+GHP1D2P2Mjd+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;
}
}
در فایل xml خود این کد را در باتن قرار بدهید:
android:onClick="onUpgradeAppButtonClicked"
-
نقل قول: پرداخت درون برنامه ای
این کد صفحه xml هست ولی باز هم ارور میده<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="163dp"
android:onClick="onUpgradeAppButtonClicked"
android:text="پرداخت" />
</RelativeLayout>
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
این کد صفحه xml هست ولی باز هم ارور میده
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="163dp"
android:onClick="onUpgradeAppButtonClicked"
android:text="پرداخت" />
</RelativeLayout>
شناسه محصولی که در پنل کاربری بازار ثبت کردی چیه؟
خواهشا log ارور را قرار بده
-
نقل قول: پرداخت درون برنامه ای
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
morahimi
com.yazdi.eyazdi
پس این چیه اینجا نوشتی؟
static final String SKU_PREMIUM = "com.i";
-
نقل قول: پرداخت درون برنامه ای
بیا این کد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;
}
}
-
نقل قول: پرداخت درون برنامه ای
نقل قول:
نوشته شده توسط
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#