طقم متجر iPhone: كيفية التقاط الحدث إلغاء
سؤال
ها هي مشكلتي:
عند استخدام STOREKIT للشراء داخل التطبيق ، أعرض طريقة عرض "تحميل" لإخبار المستخدم ببضع ثوانٍ أثناء تقدم العملية ؛ ولكن دعنا نقول هذا المستخدم نفسه ، عندما يسأل storekit له كلمة مرور حساب iTunes ، اضغط على الزر "إلغاء" ... كيف يمكنني "التقاط" هذا الحدث لإخفاء عرض التحميل؟
أخشى أن يكون سبب رفض Apple لأن اتصال المستخدم مهم جدًا.
شكرا على أي نصائح!
تحرير: أنا لست في صفقة هنا ؛ خطوتي الأولى هي استعادة المعاملات المكتملة بحيث يتم تشغيل موجه كلمة المرور بهذه الطريقة:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
المحلول
تم الإبلاغ عن شيء مشابه في منتديات Apple Dev.
ماذا يحدث عندما يضرب المستخدم إلغاء بعد طلب الاستعادة ...
في حالتهم ، أنشأت نسخة ولصق طريقة من الوثائق خطأً تم تجميعه على ما يبدو دون خطأ.
// wrong, but compiles
- (void)paymentQueue:(SKPaymentQueue *)queuerestoreCompletedTransactionsFailedWithError:(NSError *)error
بدلاً من
// correct
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
إذا كانت طريقة المراقب الخاصة بك تبدو مثل أول طريقة أعلاه ، فربما لا تتلقى رسالة الفشل لعملية الاستعادة.
تحديث:
في وثائق SDK ل SKPaymentTransactionObserver
, ، أرى طريقة فشل الاستعادة لنظام التشغيل 3.1 (2009-11-17) ولكن لا يبدو أن الوثائق 3.0 (2009-05-01). غريب نظرًا لأن DOC 3.1 ينص على أن طريقة المراقب هذه "متوفرة في iPhone OS 3.0 وبعد ذلك".
لكى تتأكد. لقد راجعت نسختي من iPhoneOS3.0.SDK/SYSTEM/LIBRARY/FRAMEWORKS/StoreKit.framework/headers/skpaymentqueue.h للتأكد من أن طريقة مراقب الفشل في الاستعادة موجودة. (أنه.)
نصائح أخرى
إذا انقر المستخدم على زر "إلغاء" ، فسوف يفشل الطلب - استخدم مراقب المتجر مثل ...
MyStoreObserver *observer = [[MyStoreObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
والتعامل مع مثل هذا ....
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}