diff --git a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
index acbe995..d10edc9 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.2+1
+
+* Fix wrong data type when cancelling user credentials dialog.
+
 ## 0.1.2
 
 * Added countryCode to the SKPriceLocaleWrapper.
@@ -12,7 +16,7 @@
 
 ## 0.1.0+2
 
-* Changed the iOS payment queue handler in such a way that it only adds a listener to the `SKPaymentQueue` when there 
+* Changed the iOS payment queue handler in such a way that it only adds a listener to the `SKPaymentQueue` when there
   is a listener to the Dart `purchaseStream`.
 
 ## 0.1.0+1
diff --git a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
index c39ad9e..079e750 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
@@ -66,7 +66,7 @@
   /// addTransactionObserver:]`](https://developer.apple.com/documentation/storekit/skpaymentqueue/1506042-addtransactionobserver?language=objc).
   void setTransactionObserver(SKTransactionObserverWrapper observer) {
     _observer = observer;
-    channel.setMethodCallHandler(_handleObserverCallbacks);
+    channel.setMethodCallHandler(handleObserverCallbacks);
   }
 
   /// Instructs the iOS implementation to register a transaction observer and
@@ -208,8 +208,12 @@
         .invokeMethod<void>('-[SKPaymentQueue showPriceConsentIfNeeded]');
   }
 
-  // Triage a method channel call from the platform and triggers the correct observer method.
-  Future<dynamic> _handleObserverCallbacks(MethodCall call) async {
+  /// Triage a method channel call from the platform and triggers the correct observer method.
+  ///
+  /// This method is public for testing purposes only and should not be used
+  /// outside this class.
+  @visibleForTesting
+  Future<dynamic> handleObserverCallbacks(MethodCall call) async {
     assert(_observer != null,
         '[in_app_purchase]: (Fatal)The observer has not been set but we received a purchase transaction notification. Please ensure the observer has been set using `setTransactionObserver`. Make sure the observer is added right at the App Launch.');
     final SKTransactionObserverWrapper observer = _observer!;
@@ -232,7 +236,8 @@
         }
       case 'restoreCompletedTransactionsFailed':
         {
-          SKError error = SKError.fromJson(call.arguments);
+          SKError error =
+              SKError.fromJson(Map<String, dynamic>.from(call.arguments));
           return Future<void>(() {
             observer.restoreCompletedTransactionsFailed(error: error);
           });
diff --git a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
index b73ad84..69afe52 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the iOS StoreKit Framework.
 repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.1.2
+version: 0.1.2+1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_payment_queue_delegate_api_test.dart b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_payment_queue_delegate_api_test.dart
index b61411d..ca2b336 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_payment_queue_delegate_api_test.dart
+++ b/packages/in_app_purchase/in_app_purchase_ios/test/store_kit_wrappers/sk_payment_queue_delegate_api_test.dart
@@ -68,6 +68,65 @@
       },
     );
   });
+
+  test(
+      'handleObserverCallbacks should call SKTransactionObserverWrapper.restoreCompletedTransactionsFailed',
+      () async {
+    SKPaymentQueueWrapper queue = SKPaymentQueueWrapper();
+    TestTransactionObserverWrapper testObserver =
+        TestTransactionObserverWrapper();
+    queue.setTransactionObserver(testObserver);
+
+    final arguments = <dynamic, dynamic>{
+      'code': 100,
+      'domain': 'domain',
+      'userInfo': <String, dynamic>{'error': 'underlying_error'},
+    };
+
+    await queue.handleObserverCallbacks(
+      MethodCall('restoreCompletedTransactionsFailed', arguments),
+    );
+
+    expect(
+      testObserver.log,
+      <Matcher>{
+        equals('restoreCompletedTransactionsFailed'),
+      },
+    );
+  });
+}
+
+class TestTransactionObserverWrapper extends SKTransactionObserverWrapper {
+  final List<String> log = <String>[];
+
+  @override
+  void updatedTransactions(
+      {required List<SKPaymentTransactionWrapper> transactions}) {
+    log.add('updatedTransactions');
+  }
+
+  @override
+  void removedTransactions(
+      {required List<SKPaymentTransactionWrapper> transactions}) {
+    log.add('removedTransactions');
+  }
+
+  @override
+  void restoreCompletedTransactionsFailed({required SKError error}) {
+    log.add('restoreCompletedTransactionsFailed');
+  }
+
+  @override
+  void paymentQueueRestoreCompletedTransactionsFinished() {
+    log.add('paymentQueueRestoreCompletedTransactionsFinished');
+  }
+
+  @override
+  bool shouldAddStorePayment(
+      {required SKPaymentWrapper payment, required SKProductWrapper product}) {
+    log.add('shouldAddStorePayment');
+    return false;
+  }
 }
 
 class TestPaymentQueueDelegate extends SKPaymentQueueDelegateWrapper {
