【问题标题】:Random Xamarin crash / ios7 / StoreKit随机 Xamarin 崩溃 / ios7 / StoreKit
【发布时间】:2013-11-25 09:17:21
【问题描述】:

我们的应用内购买流程目前正面临一个非常烦人的严重随机崩溃。

随机,因为只有部分客户会遇到此问题。

在 ios7 发布时突然出现崩溃(在 ios7 RTM 之前,没有收到崩溃报告)。所以我们假设它与 StoreKit 行为的变化有关。

我们调用事务的时候好像有问题。OriginalTransaction

其他 Xamarin 用户是否面临同样的问题?

搜索 Xamarin 论坛/谷歌等,我们发现我们的问题可能与我们在这里找到的这个错误有关 https://bugzilla.xamarin.com/show_bug.cgi?id=2871#c13

有人找到解决这个随机错误的方法了吗?

更一般地说(不涉及 Xamarin/Monotouch),是否有人面临 ios7 和 storekit 的类似问题?

我们正在使用:

  • Xamarin Studio 4.2.1(内部版本 1)
  • Xamarin.iOS 7.0.4.209
  • 单声道 3.2.4
  • Xcode 4.6.3

这是我们的 UpdatedTransactions 方法的代码:

public override void UpdatedTransactions(SKPaymentQueue queue, SKPaymentTransaction[] transactions)
{
    List<SKPaymentTransaction> chartTransactions = new List<SKPaymentTransaction>();
        foreach (SKPaymentTransaction transaction in transactions)
        {
            string productId = transaction.TransactionState == SKPaymentTransactionState.Restored ? transaction.OriginalTransaction.Payment.ProductIdentifier : transaction.Payment.ProductIdentifier;
             if (string.IsNullOrEmpty(_ProductIdPrefix) == false && productId.StartsWith(_ProductIdPrefix, true, CultureInfo.InvariantCulture))
             {
                  chartTransactions.Add(transaction);
             }
         }
         _PaymentTransactionChangedCallback(chartTransactions.ToArray());
}

这是重新符号化的崩溃日志(我们用相同的调用堆栈重新符号化了许多客户的崩溃日志):

...
(not re-symbolized)
...
mono_handle_native_sigsegv (in OurAppMono) (mini-exceptions.c:2325)
sigabrt_signal_handler (in OurAppMono) (mini-posix.c:196)
...
(not re-symbolized)
...
monotouch_unhandled_exception_handler (in OurAppMono) (monotouch-glue.m:1440)
mono_invoke_unhandled_exception_hook (in OurAppMono) (mini-exceptions.c:2561)
mono_thread_abort (in OurAppMono) (mini.c:2629)
mono_handle_exception_internal (in OurAppMono) + 2136
mono_handle_exception (in OurAppMono) (mini-exceptions.c:1902)
handle_signal_exception (in OurAppMono) (exceptions-arm.c:559)

wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (in OurAppMono) + 196
mono_jit_runtime_invoke (in OurAppMono) (mini.c:5793)
mono_runtime_invoke (in OurAppMono) (object.c:2790)
native_to_managed_trampoline_OurApp_ChartsServer_IOSChartPaymentObserver_UpdatedTransactions (in OurAppMono) (<stdin>:1214)
...
(not re-symbolized)
...
wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr (in OurAppMono) + 236
OurAppMono_Application_Main_string__ (in OurAppMono) + 164
wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr (in OurAppMono) + 196
mono_jit_runtime_invoke (in OurAppMono) (mini.c:5793)
mono_runtime_invoke (in OurAppMono) (object.c:2790)
mono_runtime_exec_main (in OurAppMono) (object.c:3972)
mono_runtime_run_main (in OurAppMono) (object.c:3602)
mono_jit_exec (in OurAppMono) (driver.c:1125)
main (in OurAppMono) (main.m:482)

编辑:

崩溃似乎与 ios7 有关。 (与 Xamarin 无关)。

解决方案是处理AppStore返回的(productid = nil),并完成匹配交易。

参考:

【问题讨论】:

    标签: xamarin.ios crash ios7 xamarin storekit


    【解决方案1】:

    我认为这与 bug #2871 无关,但我认为它是 OriginalTransaction getter 内部的 NullReferenceException(或在您调用 OriginalTransaction getter 的位置附近 - 由于优化,确切位置可能有点偏离)。

    应用程序崩溃是因为您没有处理异常 - 我建议您在 UpdateTransaction 方法中添加异常处理,并以某种方式处理异常(例如,向您自己发送日志,向用户发送错误消息和/或再试一次,等等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2013-08-23
      • 2013-04-21
      • 2011-08-13
      • 1970-01-01
      相关资源
      最近更新 更多