[in_app_purchase] update docs to warn about `completePurchase` (#2739)
diff --git a/packages/in_app_purchase/CHANGELOG.md b/packages/in_app_purchase/CHANGELOG.md
index 647ff0b..c50133d 100644
--- a/packages/in_app_purchase/CHANGELOG.md
+++ b/packages/in_app_purchase/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.3+1
+
+* Update documentations for `InAppPurchase.completePurchase` and update README.
+
## 0.3.3
* Introduce `SKPaymentQueueWrapper.transactions`.
diff --git a/packages/in_app_purchase/README.md b/packages/in_app_purchase/README.md
index c366e14..f3a34a6 100644
--- a/packages/in_app_purchase/README.md
+++ b/packages/in_app_purchase/README.md
@@ -120,6 +120,24 @@
these across devices you'll need to persist them on your own server and query
that as well.
+### Listening to purchase updates
+
+You should always start listening to purchase update as early as possible to be able
+to catch all purchase updates, including the ones from the previous app session.
+To listen to the update:
+
+```dart
+ Stream purchaseUpdated =
+ InAppPurchaseConnection.instance.purchaseUpdatedStream;
+ _subscription = purchaseUpdated.listen((purchaseDetailsList) {
+ _listenToPurchaseUpdated(purchaseDetailsList);
+ }, onDone: () {
+ _subscription.cancel();
+ }, onError: (error) {
+ // handle error here.
+ });
+```
+
### Making a purchase
Both storefronts handle consumable and non-consumable products differently. If
@@ -134,11 +152,19 @@
} else {
InAppPurchaseConnection.instance.buyNonConsumable(purchaseParam: purchaseParam);
}
-
// From here the purchase flow will be handled by the underlying storefront.
// Updates will be delivered to the `InAppPurchaseConnection.instance.purchaseUpdatedStream`.
```
+### Complete a purchase
+
+The `InAppPurchaseConnection.purchaseUpdatedStream` will send purchase updates after
+you initiate the purchase flow using `InAppPurchaseConnection.buyConsumable` or `InAppPurchaseConnection.buyNonConsumable`.
+After delivering the content to the user, you need to call `InAppPurchaseConnection.completePurchase` to tell the `GooglePlay`
+and `AppStore` that the purchase has been finished.
+
+WARNING! Failure to call `InAppPurchaseConnection.completePurchase` and get a successful response within 3 days of the purchase will result a refund.
+
## Development
This plugin uses
diff --git a/packages/in_app_purchase/lib/src/in_app_purchase/in_app_purchase_connection.dart b/packages/in_app_purchase/lib/src/in_app_purchase/in_app_purchase_connection.dart
index 4c4953d..2079f69 100644
--- a/packages/in_app_purchase/lib/src/in_app_purchase/in_app_purchase_connection.dart
+++ b/packages/in_app_purchase/lib/src/in_app_purchase/in_app_purchase_connection.dart
@@ -109,8 +109,7 @@
/// [PurchaseDetails.status] and update your UI accordingly. When the
/// [PurchaseDetails.status] is [PurchaseStatus.purchased] or
/// [PurchaseStatus.error], you should deliver the content or handle the
- /// error. On iOS, you also need to call [completePurchase] to finish the
- /// purchasing process.
+ /// error, then call [completePurchase] to finish the purchasing process.
///
/// This method does return whether or not the purchase request was initially
/// sent successfully.
diff --git a/packages/in_app_purchase/pubspec.yaml b/packages/in_app_purchase/pubspec.yaml
index ac8971e..b2ee797 100644
--- a/packages/in_app_purchase/pubspec.yaml
+++ b/packages/in_app_purchase/pubspec.yaml
@@ -1,7 +1,7 @@
name: in_app_purchase
description: A Flutter plugin for in-app purchases. Exposes APIs for making in-app purchases through the App Store and Google Play.
homepage: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase
-version: 0.3.3
+version: 0.3.3+1
dependencies:
async: ^2.0.8