ios - लेनदेन कतार ऑब्ज़र्वर को जोड़ना और निकालना-सही तरीका है?




swift transactions (2)

यह ऐप लॉन्च पर पर्यवेक्षकों को जोड़ने के लिए उपयोगी है क्योंकि कभी-कभी जब एप्लिकेशन खरीद प्रवाह के दौरान बंद हो जाता है या इंटरनेट नीचे चला जाता है (ऐसे मामलों को ट्यूटोरियल द्वारा नहीं लिया जाता है क्योंकि वे ट्यूटोरियल को स्पष्ट करने के लिए अधिक विशिष्ट हैं)

यदि कोई लेन-देन बाधित हो जाता है, तो यह अगले लेनदेन की शुरुआत तक पूरा नहीं हो जाता है, जहां आप पर्यवेक्षक को पंजीकृत करते हैं। इससे बचने के लिए, आप इसे ऐप लॉन्च पर संलग्न करते हैं और ओएस लॉन्च पर अंतिम लंबित लेनदेन के साथ अपडेट हो जाएगा और यह बेहतर उपयोगकर्ता प्रवाह प्रदान करेगा।

ऐप खरीद में संदर्भ के साथ ... मैं इस तकनीकी नोट का संदर्भ देता हूं: https://developer.apple.com/library/ios/technotes/tn2387/_index.html

इसमें कहा गया है कि हमें AppDelegate फ़ाइल में किए गए AppDelegate didFinishLaunchingWithOptions के साथ लेनदेन पर्यवेक्षक को जोड़ना चाहिए। और यह कि हमें applicationWillTerminate में लेनदेन पर्यवेक्षक को निकालना चाहिए AppDelegate के AppDelegate

यह कई ट्यूटोरियल जो मैंने पढ़ा है (काफी वर्तमान वाले) के साथ नहीं रखता है और इस मामले पर कई धागे के साथ हालात में (हाल ही में)।

मैं उलझन में हूं। ऐप्पल जाहिर 'ढेर के राजा' है तो मुझे तकनीकी नोट की दिशा अपनानी चाहिए और लेन-देन क्यूई पर्यवेक्षक को didFinishLaunchingWithOptions में जोड़ना चाहिए और इसे applicationWillTerminate पर didFinishLaunchingWithOptions हटा देना चाहिए?

क्या कोई इसे थोड़ा और स्पष्ट कर सकता है? अग्रिम में धन्यवाद।


तुम पूछो:

इसमें कहा गया है कि हमें AppDelegate फ़ाइल में किए गए फ़िनिश लॉन्चिंग विथ didFinishLaunchingWithOptions के साथ लेनदेन पर्यवेक्षक को जोड़ना चाहिए। और यह कि हमें applicationWillTerminate में लेनदेन पर्यवेक्षक को निकालना चाहिए AppDelegate के AppDelegate

यह मैंने पढ़ा है कि कई ट्यूटोरियल के साथ रखने में नहीं है ...

नहीं, इस तरह से इसे जोड़ने में कुछ भी गलत नहीं है। तकनीकी नोट के रूप में, "लॉन्च पर अपने ऐप के पर्यवेक्षक को जोड़ना सुनिश्चित करता है कि यह आपके ऐप के सभी लॉन्च के दौरान जारी रहेगा, इस प्रकार आपके ऐप को सभी भुगतान कतार सूचनाएं प्राप्त करने की इजाजत दी जाएगी।"

यदि आपके पास कुछ संदर्भ है जो उस अभ्यास के बारे में सलाह देता है, तो कृपया अपने प्रश्न को संपादित करें और हमारे साथ विशिष्ट संदर्भ साझा करें और हम उस लिंक पर विशेष रूप से टिप्पणी कर सकते हैं।

एक टिप्पणी में, आपने बाद में पूछा:

क्या AppDelegate भी सभी प्रासंगिक प्रतिनिधि तरीकों को शामिल करना होगा?

कुछ विकल्प हैं उदाहरण के लिए, आप इस के लिए एक समर्पित ऑब्जेक्ट इन्स्तांत कर सकते हैं। स्विफ्ट 3 में:

let paymentTransactionObserver = PaymentTransactionObserver()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    SKPaymentQueue.default().add(paymentTransactionObserver)

    return true
}

func applicationWillTerminate(_ application: UIApplication) {
    SKPaymentQueue.default().remove(paymentTransactionObserver)
}

या स्विफ्ट 2 में:

let paymentTransactionObserver = PaymentTransactionObserver()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    SKPaymentQueue.defaultQueue().addTransactionObserver(paymentTransactionObserver)

    return true
}

func applicationWillTerminate(application: UIApplication) {
    SKPaymentQueue.defaultQueue().removeTransactionObserver(paymentTransactionObserver)
}

स्विफ्ट 3 में, साथ:

class PaymentTransactionObserver: NSObject, SKPaymentTransactionObserver {

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { ... }

    func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) { ... }

    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { ... }

    func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { ... }

    func paymentQueue(_ queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) { ... }

}

या स्विफ्ट 2 में:

class PaymentTransactionObserver: NSObject, SKPaymentTransactionObserver {

    func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { ... }

    func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) { ... }

    func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { ... }

    func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) { ... }

    func paymentQueue(queue: SKPaymentQueue, updatedDownloads downloads: [SKDownload]) { ... }

}

या, वैकल्पिक रूप से, आप इसे सीधे अपने AppDelegate जोड़ सकते हैं, लेकिन यदि आप ऐसा करते हैं, तो आप एक एक्सटेंशन के साथ प्रोटोकॉल अनुरूपता जोड़ना चाह सकते हैं, जो एक साथ ठीक से समूहित उन प्रासंगिक विधियों को रखने के लिए, जैसे कि स्विफ्ट 3 में:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    SKPaymentQueue.default().addTransactionObserver(self)

    return true
}

func applicationWillTerminate(_ application: UIApplication) {
    SKPaymentQueue.default().remove(self)
}

या स्विफ्ट 2 में:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    SKPaymentQueue.defaultQueue().addTransactionObserver(self)

    return true
}

func applicationWillTerminate(application: UIApplication) {
    SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
}

तथा

extension AppDelegate: SKPaymentTransactionObserver {

    // the `SKPaymentTransactionObserver` methods here

}




in-app-purchase