سؤال

ها هي مشكلتي:

عند استخدام 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;
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top