你問:
它指出,我們應該在AppDelegate的文件中添加事務觀察員didFinishLaunchingWithOptions
。我們應該刪除AppDelegate
的applicationWillTerminate
中的交易觀察員。
這是不符合很多教程保持我已閱讀...
沒有,有沒有錯,加入這種方式。正如技術說明所述,「在啓動時添加應用程序的觀察者可確保在應用程序的所有啓動過程中它都會持續存在,從而允許您的應用程序接收所有付款隊列通知。」
如果您有一些建議反對這種做法,請編輯您的問題並與我們分享具體的參考資料,我們可以專門針對該鏈接發表評論。
在一個評論,你後來問:
我必須包括所有在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
,但如果你這樣做,你可能需要add protocol conformance with an extension,以保持這些相關的方法乾淨地組合在一起,例如,在斯威夫特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
}
太棒了!我已經提高了這一點,希望我可以提高更多。 –