标签: in-app-subscription

IAB订阅免费试用状态

管理免费试用订阅状态的正确方法是什么?我找不到任何关于在json信息中获取购买状态的信息,例如freeTrial = true/false或freeTrialDuration = 7.当用户通过免费试用购买订阅时,会发生交易吗?免费试用期到期后的下一步是什么?一项新交易?

android in-app-purchase in-app-billing in-app-subscription

5
推荐指数
0
解决办法
181
查看次数

应用程序因准则 3.1.2 - 业务 - 付款 - 订阅而被拒绝

由于自动续订订阅,我的 macOS 应用程序不断被拒绝。

这是苹果评论家对我说的:

准则 3.1.2 - 业务 - 付款 - 订阅

您的应用程序使用自动续订订阅,但这不是对该服务的适当使用。

下一步

要解决此问题,请将您的应用内购买产品更改为非续订订阅。

这对我来说毫无意义,因为同一应用程序的 iOS 版本已获得批准,并且它具有完全相同的自动续订订阅数据。我要求提供更多信息,但他们没有回答我。

有人可以帮助我或给我一些线索来了解可能发生的情况吗?

谢谢你的时间。

PS:该应用程序的两个版本(iOS 和 macOS)同时经过审核 :p iOS 批准,macOS 拒绝。这是一款生产力应用程序,可免费试用 7 天。

macos in-app-purchase appstore-approval in-app-subscription auto-renewable

5
推荐指数
0
解决办法
1430
查看次数

如何在 Google Play 结算中获取我所有应用内商品的 SKU 详细信息

在旧版本的应用内计费中,我使用以下代码获取 IAP 商品价格。

我无法在新版本中找到解决此问题的方法。请协助我在“Google Play 结算”中获取所有应用内商品的 SKU 详细信息

    ArrayList<String> skuList = new ArrayList<String>();
    Collections.addAll(skuList, SKU_GEM);
    Collections.addAll(skuList, SKU_COMBO);
    Collections.addAll(skuList, SKU_SALE);

    for(String s : skuList){ 
       Log.d("IabHelper", "skuList from list : " + s);
    }

    String[][] itemPrice = new String[3][]; 

    itemPrice[0]=new String[SKU_GEM.length]; 
    itemPrice[1]=new String[SKU_COMBO.length];
    itemPrice[2]=new String[SKU_SALE.length];

    Bundle querySkus = new Bundle();
    querySkus.putStringArrayList("ITEM_ID_LIST", skuList);

    Bundle skuDetails = mService.getSkuDetails(3,packageName, "inapp", querySkus); 

     if (response == 0) {
        ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
        Log.d("IabHelper", "responseList  : " + responseList);
        for (String thisResponse : responseList) {
            JSONObject object = …
Run Code Online (Sandbox Code Playgroud)

android in-app-billing android-studio in-app-subscription android-inapp-purchase

5
推荐指数
1
解决办法
5052
查看次数

Google API - invalid_request - 无法根据请求确定客户端 ID

我正在将 google play 应用内订阅集成到我的应用程序中。要访问 google API,首先我需要获取 access_token,然后在标头中使用它来访问订阅 API。按照程序(Android:inApp购买收据验证google play)我得到了我的凭据文件,如下所示

{
  "type": "service_account",
  "project_id": "my-project-id",
  "private_key_id": "x",
  "private_key": "-----BEGIN PRIVATE KEY-----y-----END PRIVATE KEY-----\n",
  "client_email": "google-play-developer@z.iam.gserviceaccount.com",
  "client_id": "x",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/google-play-developer%40y.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)

注意:真实的 id 和值替换为 x、y 和 z

接下来,为了用 JWT 交换 access_tokenm,我正在使用 php 的 Google API 客户端库 https://github.com/googleapis/google-api-php-client

这是我的代码

$client = new \Google_Client();
$client->setAuthConfig('client_secret.json');
$client->addScope('https://www.googleapis.com/auth/androidpublisher');
$client->setRedirectUri($request->redirect_uri);
$token = $client->fetchAccessTokenWithAuthCode($request->code);
Run Code Online (Sandbox Code Playgroud)

但我无法获取访问令牌。出现以下错误

{
    "error": "invalid_request",
    "error_description": "Could not determine client ID from request."
}
Run Code Online (Sandbox Code Playgroud)

php google-play in-app-subscription

5
推荐指数
0
解决办法
1129
查看次数

如何从 Google Play 管理中心禁用暂停的订阅?

要禁止用户暂停订阅,请执行以下操作:

  1. 登录 Google Play 管理中心。
  2. 选择您的应用,然后转到商店状态 > 应用内产品 > 订阅。
  3. 展开订阅设置部分。
  4. 检查禁用暂停。

我正在执行上述步骤,但暂停订阅未禁用。

android in-app-subscription

5
推荐指数
1
解决办法
2197
查看次数

如何在flutter中使用RevenueCat取消订阅?

我已经在 flutter 中使用 RevenueCat 实现了订阅,但 RevenueCat 没有关于取消订阅的文档。

in-app-subscription flutter revenuecat

5
推荐指数
1
解决办法
3267
查看次数

PresentCodeRedemptionSheet 未显示兑换优惠按钮

我在每月订阅的 iTunes 帐户上创建优惠代码。我正在使用PresentCodeRedemptionSheet StoreKit API 使用此代码在应用程序中输入兑换代码

 let paymentQueue = SKPaymentQueue.default()
    if #available(iOS 14.0, *) {
        paymentQueue.presentCodeRedemptionSheet()
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码向我展示了这个 UI

在此输入图像描述

输入代码后,此 UI 没有显示兑换优惠按钮

在此输入图像描述

我被困在这里请帮助我:)。

in-app-purchase ios swift in-app-subscription swift5

5
推荐指数
1
解决办法
3638
查看次数

在flutter中使用restorePurchases查找已购买的订阅

我在 Flutter 应用程序中使用它in_app_purchase: ^1.0.1来实现应用程序内购买订阅。我已经成功购买了一次订阅,但是当我尝试使用restorePurchases()来获取用户已购买的订阅时,我得到的列表每次都会增加长度。看起来同一产品有重复购买,这是不可能的。

这是我的代码。

_processIAP() async {
    Stream purchaseUpdated = InAppPurchase.instance.purchaseStream;
    _subscription = purchaseUpdated.listen((purchaseDetailsList) {
        print("purchaseDetailsList.length = " + purchaseDetailsList.length.toString());
        purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
        
        print(purchaseDetails.purchaseID + " " + purchaseDetails.pendingCompletePurchase.toString());

        if (purchaseDetails.status == PurchaseStatus.pending) {
            print("Purchase is still pending!");
        } else {
            if (purchaseDetails.status == PurchaseStatus.error) {
                print("An error has occurred!");
            } else if (purchaseDetails.status == PurchaseStatus.purchased || purchaseDetails.status == PurchaseStatus.restored) {
                print("Purchased or restored successfully!");

                await InAppPurchase.instance.completePurchase(purchaseDetails);
                print("Purchase marked as completed");
          }
          if (purchaseDetails.pendingCompletePurchase) …
Run Code Online (Sandbox Code Playgroud)

in-app-purchase ios in-app-subscription flutter

5
推荐指数
0
解决办法
2083
查看次数

过期后重新订阅时,Google Play 商店不会返回 obfuscatedExternalAccountId

重现步骤:

  1. 在应用程序中订阅订阅
  2. 前往 Google Play 商店并取消订阅。
  3. 返回订阅页面
  4. 等待订阅到期
  5. 订阅现在将显示在过期标题下方。
  6. 单击重新订阅。

我收到的 Google Play 商店通知是:

{
    "version": "1.0",
    "packageName": "package.name",
    "eventTimeMillis": "111111111111",
    "subscriptionNotification": {
        "version": "1.0",
        "notificationType": 4,
        "purchaseToken": "purchase token",
        "subscriptionId": "first_subscription"
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用订阅 get api时,我得到:

{
    "startTimeMillis": "1635472371631",
    "expiryTimeMillis": "1635472675112",
    "autoRenewing": false,
    "priceCurrencyCode": "EUR",
    "priceAmountMicros": "4300000",
    "countryCode": "IN",
    "developerPayload": "",
    "cancelReason": 1,
    "orderId": "GPA.3388-8947-4636-69596",
    "purchaseType": 0,
    "acknowledgementState": 0,
    "kind": "androidpublisher#subscriptionPurchase"
}
Run Code Online (Sandbox Code Playgroud)

如果我既没有混淆的ExternalAccount id 也没有要查询的linkedPurchaseToken,我该如何识别用户?

in-app in-app-subscription

5
推荐指数
1
解决办法
1850
查看次数

如何管理免费试用期的 Google 结算订阅?

这是 Google Play 控制台中当前的测试设置:

  • 测试品1
    • 订阅基础计划 1:持续时间 1 个月
    • 订阅基础计划2:持续时间6个月
      • 优惠1:1周免费试用期

结果queryProductDetailsAsync是 3 个报价:

  • 优惠1
    • 定价阶段 1:P1M
  • 优惠2
    • 定价阶段 1:P1W(免费)
    • 定价阶段 2:P6M
  • 优惠3
    • 定价阶段 1:P6M

该应用程序动态地向用户呈现所有可用的优惠,以便可以通过 Google Play 控制台远程管理优惠。

问题是,除了优惠 3 之外,还出现了优惠 2。如果基本计划有优惠并且用户有资格获得该优惠,我想隐藏基本计划(优惠 3),因为它有点多余,因为吸引力不如P1W (free) + P6M(报价2)。

另一方面,如果用户已经订阅P1W (free) + P6M并在免费试用期内取消,则他们不应获得基本P1W (free) + P6M计划,而只能获得基本计划P6M。我假设这已经由 Google Billing 管理,因为queryProductDetailsAsync应该只返回用户可用的优惠。

queryProductDetailsAsync回复中,我看不出如何知道优惠 2 正在使用优惠 3 作为基本计划。它们显示为两个不相关的优惠,这使得很难在应用程序中添加任何逻辑来隐藏基本优惠。我能想到的唯一解决方案是使用offerTags,将唯一的 ID 添加到基本计划中,以便能够相互关联。

如果优惠 2 也可用,隐藏优惠 3 的最佳方法是什么?

google-play-services in-app-subscription

5
推荐指数
1
解决办法
2416
查看次数