美文网首页FlutterFlutter开发圈
Flutter iOS内购(代码篇-全网最全)

Flutter iOS内购(代码篇-全网最全)

作者: StevenHu_Sir | 来源:发表于2019-12-18 08:45 被阅读0次

    内购流程精简

    • Client向Server发请求,获得产品列表
    • Client向App Store发送请求,得到产品的信息,并将信息显示给用户
    • 用户选择某个产品, Client向App Store发送支付请求
    • Client从交易完成信息中获得数据并验证,然后发送至Server
    • Server验证数据有效性并返回有效标识给Client

    内购凭证

    内购凭证1 内购凭证2 内购凭证3 内购凭证4-非续期订阅

    Server端处理

    • 产品列表
    • 验证交易完成信息-并返回有效标识,产品列表剔除该项

    1.数据返回案例

    1.1 getProduct

    productId: 100000102,
    price: 6, 
    currency: CNY, 
    localizedPrice: ¥6.00, 
    title: 分配对象中的分配能量, 
    description: 分配对象中的分配能量全部获取,
    introductoryPrice: , 
    introductoryPricePaymentModeIOS: ,
    subscriptionPeriodNumberIOS: 0, 
    subscriptionPeriodUnitIOS: DAY, 
    introductoryPricePaymentModeIOS: ,
    introductoryPriceNumberOfPeriodsIOS: , 
    introductoryPriceSubscriptionPeriodIOS: ,
    subscriptionPeriodAndroid: null,
    introductoryPriceCyclesAndroid: null,
    introductoryPricePeriodAndroid: null, 
    freeTrialPeriodAndroid: null, 
    iconUrl: null, originalJson: null, 
    originalPrice: null,
    

    1.2.purchase-error 购买商品报错

    purchase-error: 
    responseCode: null, 
    debugMessage: SKPaymentTransactionStateFailed, 
    code: E_USER_CANCELLED, 
    message: Cancelled.
    

    1.3.purchase-updated: 购买商品更新回调

    purchase-updated: 
    productId: 100000102, 
    transactionId: 1000000601440870, 
    transactionDate: 2019-12-05T20:53:14.000, 
    transactionReceipt: MIITwwYJKoZIhvcNAQcCoIITtDCCE7ACAQExCzAJBgUrDgMCGgUAMIIDZAYJKoZIhvcNAQcBoIIDVQSCA1ExggNNMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgELAgEBBAMCAQAwCwIBDwIBAQQDAgEAMAsCARACAQEEAwIBADALAgEZAgEBBAMCAQMwDAIBAwIBAQQEDAIzNjAMAgEKAgEBBAQWAjQrMAwCAQ4CAQEEBAICAI0wDQIBDQIBAQQFAgMB1lAwDQIBEwIBAQQFDAMxLjAwDgIBCQIBAQQGAgRQMjUzMBgCAQQCAQIEEMlTw5Q0JCshK6fzWO6sFVwwGwIBAAIBAQQTDBFQcm9kdWN0aW9uU2FuZGJveDAcAgEFAgEBBBTIXkXyRnuMzRZqiCxL/MGI8G4y2zAeAgEMAgEBBBYWFDIwMTktMTItMDVUMTI6NTM6MTRaMB4CARICAQEEFhYUMjAxMy0wOC0wMVQwNzowMDowMFowIAIBAgIBAQQYDBZjb20uZmVucGVpZHVpeGlhbmcud3d3MEQCAQcCAQEEPHV2uhACajc3VeLdXbAMOWMvl2MJK59Nu12gf8AhVSVWSLr5scgw7fCzPYiQM8pJsXSUP1QYQZZo91g03jBLAgEGAgEBBEPpqjamZ4bPLE+q1TewhlpLXrQvFGPm8E25kzA6P2P/AaJa7Sk8JsKYwArY/4r12PQWclwergtb/UNjff1VrfrxsacRMIIBTgIBEQIBAQSCAUQxggFAMAsCAgasAgEBBAIWADALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEBMAwCAgauAgEBBAMCAQAwDAICBq8CAQEEAwIBADAMAgIGsQIBAQQDAgEAMBQCAgamAgEBBAsMCTEwMDAwMDEwMjAbAgIGpwIBAQQSDBAxMDAwMDAwNjAxNDQwODcwMBsCAgapAgEBBBIMEDEwMDAwMDA2MDE0NDA4NzAwHwICBqgCAQEEFhYUMjAxOS0xMi0wNVQxMjo1MzoxNFowHwICBqoCAQEEFhYUMjAxOS0xMi0wNVQxMjo1MzoxNFqggg5lMIIFfDCCBGSgAwIBAgIIDutXh+eeCY0wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUxMTEzMDIxNTA5WhcNMjMwMjA3MjE0ODQ3WjCBiTE3MDUGA1UEAwwuTWFjIEFwcCBTdG9yZSBhbmQgaVR1bmVzIFN0b3JlIFJlY2VpcHQgU2lnbmluZzEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApc+B/SWigVvWh+0j2jMcjuIjwKXEJss9xp/sSg1Vhv+kAteXyjlUbX1/slQYncQsUnGOZHuCzom6SdYI5bSIcc8/W0YuxsQduAOpWKIEPiF41du30I4SjYNMWypoN5PC8r0exNKhDEpYUqsS4+3dH5gVkDUtwswSyo1IgfdYeFRr6IwxNh9KBgxHVPM3kLiykol9X6SFSuHAnOC6pLuCl2P0K5PB/T5vysH1PKmPUhrAJQp2Dt7+mf7/wmv1W16sc1FJCFaJzEOQzI6BAtCgl7ZcsaFpaYeQEGgmJjm4HRBzsApdxXPQ33Y72C3ZiB7j7AfP4o7Q0/omVYHv4gNJIwIDAQABo4IB1zCCAdMwPwYIKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLXd3ZHIwNDAdBgNVHQ4EFgQUkaSc/MR2t5+givRN9Y82Xe0rBIUwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCCAR4GA1UdIASCARUwggERMIIBDQYKKoZIhvdjZAUGATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMA4GA1UdDwEB/wQEAwIHgDAQBgoqhkiG92NkBgsBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEADaYb0y4941srB25ClmzT6IxDMIJf4FzRjb69D70a/CWS24yFw4BZ3+Pi1y4FFKwN27a4/vw1LnzLrRdrjn8f5He5sWeVtBNephmGdvhaIJXnY4wPc/zo7cYfrpn4ZUhcoOAoOsAQNy25oAQ5H3O5yAX98t5/GioqbisB/KAgXNnrfSemM/j1mOC+RNuxTGf8bgpPyeIGqNKX86eOa1GiWoR1ZdEWBGLjwV/1CKnPaNmSAMnBjLP4jQBkulhgwHyvj3XKablbKtYdaG6YQvVMpzcZm8w7HHoZQ/Ojbb9IYAYMNpIr7N4YtRHaLSPQjvygaZwXG56AezlHRTBhL8cTqDCCBCIwggMKoAMCAQICCAHevMQ5baAQMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0xMzAyMDcyMTQ4NDdaFw0yMzAyMDcyMTQ4NDdaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyjhUpstWqsgkOUjpjO7sX7h/JpG8NFN6znxjgGF3ZF6lByO2Of5QLRVWWHAtfsRuwUqFPi/w3oQaoVfJr3sY/2r6FRJJFQgZrKrbKjLtlmNoUhU9jIrsv2sYleADrAF9lwVnzg6FlTdq7Qm2rmfNUWSfxlzRvFduZzWAdjakh4FuOI/YKxVOeyXYWr9Og8GN0pPVGnG1YJydM05V+RJYDIa4Fg3B5XdFjVBIuist5JSF4ejEncZopbCj/Gd+cLoCWUt3QpE5ufXN4UzvwDtIjKblIV39amq7pxY1YNLmrfNGKcnow4vpecBqYWcVsvD95Wi8Yl9uz5nd7xtj/pJlqwIDAQABo4GmMIGjMB0GA1UdDgQWBBSIJxcJqbYYYIvs67r2R1nFUlSjtzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFCvQaUeUdgn+9GuNLkCm90dNfwheMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9jcmwuYXBwbGUuY29tL3Jvb3QuY3JsMA4GA1UdDwEB/wQEAwIBhjAQBgoqhkiG92NkBgIBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAT8/vWb4s9bJsL4/uE4cy6AU1qG6LfclpDLnZF7x3LNRn4v2abTpZXN+DAb2yriphcrGvzcNFMI+jgw3OHUe08ZOKo3SbpMOYcoc7Pq9FC5JUuTK7kBhTawpOELbZHVBsIYAKiU5XjGtbPD2m/d73DSMdC0omhz+6kZJMpBkSGW1X9XpYh3toiuSGjErr4kkUqqXdVQCprrtLMK7hoLG8KYDmCXflvjSiAcp/3OIK5ju4u+y6YpXzBWNBgs0POx1MlaTbq/nJlelP5E3nJpmB6bz5tCnSAXpm4S6M9iGKxfh44YGuv9OQnamt86/9OBqWZzAcUaVc7HGKgrRsDwwVHzCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5JGpCR+R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQCdN/QaiY+dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm/IlA7pVj01dDfFkNSMVSxVZHbOU9/acns9QusFYUGePCLQg98usLCBvcLY/ATCMt0PPD5098ytJKBrI/s61uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs/j743DN5qNMRX4fTGtQlkGJxHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP/Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn+9GuNLkCm90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn+9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQwggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14t+2Mm9zzd5vydtJ3ME/BH4WDhRuZPUc38qmbQI4s1LGQEti+9HOb7tJkD8t5TzTYoj75eP9ryAfsfTmDi1Mg0zjEsb+aTwpr/yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UXF6jcfiI1yiXV2Q/Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy/5U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU+12TZ/wYdV2aeZuTJC+9jVcZ5+oVK3G72TQiQSKscPHbZNnF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAcswggHHAgEBMIGjMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5AggO61eH554JjTAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBAJe1tKn2P6xlk1tewTQcvrL1XJKyx5mEWRtNYqGQCaVoGjG1dMtSv4EnmKklzJB69DzQUUeNUrZYVPZwp8/9Ok74Cn90OVmMmlQGuy7DWMbsltmhfQ9xIS3TM9ZYDOnCyeHaAMO3xguE661MRiTi/Ybnw8pIxY1fjXG2JyVvWcVc99P0vifipnSqy9Gy//OjAE8NdObaN3+leS1say3lOcH2cr3aSmF2EJakrvSG32fFzYDOtxAhNsd4xvcOY8o9SFGhyojI2iVjBexgKjvB26bYpv4BKmm202GQER2qizTyRT/Sc26GKbt776LnCBBUIhMVEGQc8LdqGedNZWyjx5I=, 
    purchaseToken: null, 
    orderId: null, 
    dataAndroid: null, 
    signatureAndroid: null, 
    isAcknowledgedAndroid: null, 
    autoRenewingAndroid: null, 
    purchaseStateAndroid: null, 
    developerPayloadAndroid: null, 
    originalJsonAndroid: null, 
    originalTransactionDateIOS: null, 
    originalTransactionIdentifierIOS: null
    

    代码封装

    使用案例

    1.1-获取商品

    InAppPurchase().getProducts(
        productLists: this._productLists,
        complete: (List<IAPItem> tempArray) {
          setState(() {
            _items = tempArray;
          });
          print(
              'getProducts===>${tempArray.first}');
        },
      );
    

    1.2-渲染商品数据-购买

    List<Widget> _renderInApps() {
        List<Widget> widgets = this
            ._items
            .map(
              (item) => FlatButton(
                color: Colors.blueAccent,
                onPressed: () {
                  print("---------- Buy Item Button Pressed");
                  InAppPurchase().requestPurchase(item: item);
                },
                child: Row(
                  children: <Widget>[
                    Expanded(
                      child: Container(
                        height: 48.0,
                        alignment: Alignment(-1.0, 0.0),
                        child: Text('Buy-Item${item.title}'),
                      ),
                    ),
                  ],
                ),
              ),
            )
            .toList();
        return widgets;
      }
    

    1.3 获取购买历史

    InAppPurchase().getPurchaseHistory(complete:
          (List<PurchasedItem> tempArray) {
        _purchases = tempArray;
        setState(() {});
      });
    

    补充

    1.记录下服务端内购验证receipt地址:

    在沙盒中验证receipt:https://sandbox.itunes.apple.com/verifyReceipt

    在生产环境中验证receipt:https://buy.itunes.apple.com/verifyReceipt

    相关文章

      网友评论

        本文标题:Flutter iOS内购(代码篇-全网最全)

        本文链接:https://www.haomeiwen.com/subject/wjgggctx.html