我正在使用应用程序内购买iPhone应用程序.我有一个充当SKProductsRequestDelegate和的类SKPaymentTransactionObserver,并且它在iTunes上当前发布的版本中都运行良好.
但是,在最近添加一个新的非消耗品并在Sandbox环境中进行测试之后,我现在遇到了一个奇怪的问题.每次我启动应用程序时,我昨天的购买重新出现在传递给我的交易列表中paymentQueue:updatedTransactions:,尽管事实上我已经打过电话[[SKPaymentQueue defaultQueue] finishTransaction:transaction](好几次).这是亡灵!
在我的paymentQueue:updatedTransactions:实施中,我有:
for (SKPaymentTransaction* transaction in transactions)
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
case SKPaymentTransactionStateRestored:
{
....
DDLog(@"Transaction for %@ occurred originally on %@.", transaction.payment.productIdentifier, transaction.originalTransaction.transactionDate);
....
Run Code Online (Sandbox Code Playgroud)
然后我处理购买,下载用户内容,最后,在另一种方法中,执行以下操作:
for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions])
if (([transaction.payment.productIdentifier isEqualToString:theParser.currentProductID]) &&
((transaction.transactionState==SKPaymentTransactionStatePurchased) || (transaction.transactionState==SKPaymentTransactionStateRestored))
)
{
DDLog(@"[[ Transaction will finish: product ID = %@; date = %@ ]]", transaction.payment.productIdentifier, transaction.transactionDate);
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,为了简单起见,我并没有坚持原始的事务对象,并且稍后从调用中找到它相对容易[[SKPaymentQueue defaultQueue] transactions].无论如何,我确实看到了预期的输出; 交易已完成,并且与产品ID和原始交易日期完全匹配.但是,下次我运行应用程序时,整个事情重新开始!就像iTunes …
我看到我的应用程序中经常发生异常崩溃,但仅限于运行Android 7的三星Galaxy设备.由于我的应用程序代码没有在堆栈跟踪中显示,我发现很难找到缺少外出和购买这些昂贵的设备之一.这里有线索吗?
它似乎是与输入控件关联的建议弹出窗口内发生的内部错误,可能是EditText我应用程序主屏幕上的功能.这EditText不应该是提出建议,因为我也在使用
searchBox.setImeOptions(EditorInfo.IME_ACTION_SEARCH | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
searchBox.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪如下:
java.lang.NullPointerException:
at android.widget.Editor$SuggestionsPopupWindow.initContentView(Editor.java:3729)
at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:3390)
at android.widget.Editor$SuggestionsPopupWindow.<init>(Editor.java:3675)
at android.widget.Editor.replace(Editor.java:431)
at android.widget.Editor$3.run(Editor.java:2354)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method:0)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Run Code Online (Sandbox Code Playgroud)