Предоставление всех кодов RevenueCat PurchasesErrorCode во флаттере - PullRequest
0 голосов
/ 16 октября 2019

Мне нужно перехватить все перечисленные коды ошибок BuyasesErrorCode в моем приложении Flutter, чтобы я мог соответствующим образом отреагировать на них.

В настоящее время я могу перехватывать только "userCancelled", для всего остального я могу только сообщать информациювозвращается в стандартном коде PlatformException, свойствах сообщения и сведений, не зная, что они будут содержать.

try {

  // Code to make purchase..

} on PlatformException catch (e) {

  if (!(e.details as Map)["userCancelled"]) {

    // Here I need a comprehensive switch statement so I can
    // retry where appropriate/control what messages the user sees

    String reason = '';
    (e.details as Map).forEach((k,v) => reason += '$k => $v');
    showError(context, 'Error', '${e.code} : ${e.message}');

  } else {

    showError(context, 'Purchase Cancelled', 'Your purchase was not completed, you have not been charged.');

  }
}

Эти коды доступны в IOS / Swift и Android / Kotlin, но я не могу получить их во Flutter /Дарт - что мне не хватает?

1 Ответ

1 голос
/ 16 октября 2019

Я разработал плагин RevenueCat Flutter и некоторое время назад создал проблему на GitHub, чтобы отследить это (https://github.com/RevenueCat/purchases-flutter/issues/3). Извините, есть некоторые возможности для улучшения нашей обработки ошибок Flutter.

Когда мы отправляем исключения платформы, мы передаем код ошибки в виде строки:

result.error(error.getCode().ordinal() + "", error.getMessage(), userInfoMap);

Жаль, что мы не можем просто передать int в качестве первого параметра, и мы должны передатьСтрока, я думаю, мы могли бы передать это в userInfoMap. Но сейчас, поскольку мы еще не предоставляем перечисление с кодами ошибок, вам придется сделать что-то подобное в вашем коде:

enum PurchasesErrorCode {
  UnknownError,
  PurchaseCancelledError,
  StoreProblemError,
  PurchaseNotAllowedError,
  PurchaseInvalidError,
  ProductNotAvailableForPurchaseError,
  ProductAlreadyPurchasedError,
  ReceiptAlreadyInUseError,
  InvalidReceiptError,
  MissingReceiptFileError,
  NetworkError,
  InvalidCredentialsError,
  UnexpectedBackendResponseError,
  ReceiptInUseByOtherSubscriberError,
  InvalidAppUserIdError,
  OperationAlreadyInProgressError,
  UnknownBackendError,
  InsufficientPermissionsError
}

try {
} on PlatformException catch (e) {
  PurchasesErrorCode errorCode = PurchasesErrorCode.values[int.parse(e.code)];
  switch (errorCode) {
    case PurchasesErrorCode.UnknownError:
    case PurchasesErrorCode.PurchaseCancelledError:
    case PurchasesErrorCode.StoreProblemError:
    // Add rest of cases
  }
}

Когда вы делаете e.details, вы также получаете доступ к readableErrorCode, содержащему название кода ошибки, и underlyingErrorMessage, который, как мы надеемся, может помочь вам отладить любую проблему.

Я надеюсь, чтопомогает

...