我目前正在努力在我的应用程序中实现应用内购买,并且在还原购买后,我希望调用完成功能来执行向用户显示警报的操作。我是用这种方式做的,发现有一条帖子说它甚至可能不会执行。我该如何正确地构造它。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,"classghostservice-> onstartCommand()");
foregroundNotification(1);
return START_NOT_STICKY;
}
答案 0 :(得分:2)
“我正在这样做,发现有一条帖子说它甚至可能无法执行”。
它可能不会执行,因为您未在所有路径上都调用完成处理程序。
正如Sh_Khan在回答中提到的那样,您实际上并不需要完成处理程序,您需要使用委托方法在完成时以及是否成功时得到通知。但是您的与您的特定代码有关的一个特殊问题是您没有在if语句中调用完成。
if !self.canMakePayments {
return
}
应该是
guard canMakePayments else {
completion()
return
}
在您拥有的代码中,如果canMakePayments为false,则您的完成代码将不会执行。
答案 1 :(得分:0)
这里的结果不同步
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue)
或
func paymentQueue(_ queue: SKPaymentQueue,
restoreCompletedTransactionsFailedWithError error: Error)
答案 2 :(得分:0)
假设我正在编写登录代码,并且需要完成处理程序,以便在请求完成后等待/回叫。
// MARK:-@属性
var signInCompletionHandler : ((_ result : AnyObject?, _ error : NSError?) -> Void)?
var viewController : UIViewController?
// MARK:-使用完成处理程序调用登录方法。
func login(withViewControler viewController : UIViewController, completionHandler : @escaping (_ result : AnyObject?, _ error : NSError?) -> Void) {
// Write your logic here.
}