【问题标题】:Amazon IAP Android PurchasingListener never called亚马逊 IAP Android PurchasingListener 从未调用过
【发布时间】:2022-08-04 13:36:06
【问题描述】:

我正在尝试使用 Amazon SDK (3.0.3) 在 Android 上实现订阅 IAP。我按照亚马逊相应文档及其示例应用程序中的描述制作了所有东西,并正确配置了亚马逊应用程序测试器。但是没有运气,我没有收到 PurchasingListener 的回复。

ResponseReceiver 在 Manifest 中具有以下结构:

<receiver android:name = \"com.amazon.device.iap.ResponseReceiver\"
        android:permission = \"com.amazon.inapp.purchasing.Permission.NOTIFY\"
        android:exported=\"true\">
        <intent-filter>
            <action android:name = \"com.amazon.inapp.purchasing.NOTIFY\" />
        </intent-filter>
    </receiver>

我在 onCreate() 中注册 PurchaseListener:

PurchasingService.registerListener(this.getApplicationContext(), purchasingListener);

然后在 onStart() 中进行此调用

final Set<String> productSkus = new HashSet<String>();
        for (final MySku mySku : MySku.values()) {
            productSkus.add(mySku.getSku());
            Log.d(TAG, \"onStart: call getProductData for skus: \" + mySku.getSku());
        }

        PurchasingService.getProductData(productSkus);

最后在 onResume() 中:

PurchasingService.getUserData();
PurchasingService.getPurchaseUpdates(false);

这些电话没有任何回应。侦听器本身已注册,正如我在日志中看到的那样:

2022-07-27 18:50:14.791 11790-11790/......amazon D/d: Appstore SDK - Sandbox Mode: PurchasingListener registered: ......amazon.iap.SamplePurchasingListener@b3c6192

重要的是,如果我在 Manifest 中使用旧式接收器结构(在 <receiver 标签下没有 \"android:permission = \"com.amazon.inapp.purchasing.Permission.NOTIFY\"),如下所示:

<receiver android:name = \"com.amazon.device.iap.ResponseReceiver\"
        android:exported=\"true\">
        <intent-filter>
            <action android:name = \"com.amazon.inapp.purchasing.NOTIFY\"
                android:permission = \"com.amazon.inapp.purchasing.Permission.NOTIFY\"/>
        </intent-filter>
    </receiver>

,我收到了一些回复,但非常令人沮丧,因为这不是预期的,并且此权限以 err 突出显示:

Protecting an unsupported element with a permission is a no-op and potentially dangerous

这种情况下的日志显示:

2022-07-27 19:07:11.673 12723-12723/.....amazon D/e: Appstore SDK - Sandbox Mode: sendGetUserDataRequest
2022-07-27 19:07:11.684 12723-12723/.....amazon D/e: Appstore SDK - Sandbox Mode: sendPurchaseUpdatesRequest/sendGetUserData first:e0656912-440d-4c7d-a864-0548028a803d
2022-07-27 19:07:11.743 12723-12723/.....amazon D/e: Appstore SDK - Sandbox Mode: handleResponse
2022-07-27 19:07:11.895 12723-12723/......amazon D/IAPListener: onProductDataResponse: RequestStatus (SUCCESSFUL)
2022-07-27 19:07:11.897 12723-12723/.....amazon D/IAPListener: onProductDataResponse: successful.  The item data map in this response includes the valid SKUs
2022-07-27 19:07:11.897 12723-12723/...amazon D/IAPListener: onProductDataResponse: 0 unavailable skus

...而且没有其他东西在那里。购买按钮已死,没有其他反应!

我不使用 Proguard 缩小代码。

测试设备 Amazon Fire 7 平板电脑。

目标 SDK - 32。

我在这里呆了很长时间,如果有人能帮助我解决这个问题,我将不胜感激!

先感谢您...

=========== 更新1:

在不同的测试设备上,结果是不同的。在 Amazon Fire 7 平板电脑上,一切都死了。但在小米红米 S2 PurchasingListener 上,PurchasingListener 仍然存在,但产品数据为空。这是日志:

... D/IAPListener: onUserDataResponse: get user id (l3HL7XppEMhrOGDnur9-ulvqomrSg6qyODKmah76lJU=, marketplace (US) 
... D/IAPListener: onProductDataResponse: RequestStatus (SUCCESSFUL)
.... D/IAPListener: onProductDataResponse: successful.  The item data map in this response includes the valid SKUs
.... D/IAPListener: onProductDataResponse: response.getProductData(): {}
.... D/IAPListener: onProductDataResponse: 0 unavailable skus
.... D/IAPListener: onPurchaseUpdatesResponse: requestId (a5db322e-d894-4ebf-896a-9007140c91d2) purchaseUpdatesResponseStatus (SUCCESSFUL) userId ()

三星 Galaxy Tab A 也是如此

  • 您能否确认您是否能够让SampleIAPSubscriptionsApp 在您的设备上运行?这应该有助于排除 Amazon App Tester 是否存在配置问题。
  • 不,订阅的示例应用程序也不起作用。我在亚马逊市场上也有一款应用实施了 IAP。我在使用 Amazon App Tester 成功发布之前对其进行了测试。现在它也不起作用了。
  • 听起来 Amazon App Tester 未能找到 IAP 数据。您能否确认 IAP json 数据是否在正确的位置?您是否授予 Amazon App Tester 访问外部存储的权限?我没有现代设备来验证,只是抛出一些想法。
  • 感谢你的付出!当然,它测试了很多次,json 文件在正确的位置,App Tester 识别它。我在 App Tester 界面的适当部分看到它。如果不是,我会看到对话框“没有数据”或类似的东西。可以截图:)如果你有时间,你能自己测试一下App Tester吗?甚至他们的示例应用程序也不起作用。如果你能让它工作,我们可以确认它至少对你有用,我可以检查这个代码并与我的比较,尽管我相信应该没有任何区别。
  • 我认为 App Tester 本身有问题。它很旧,似乎没有被亚马逊更新。今天直接写出来。

标签: android sdk in-app-purchase amazon


【解决方案1】:

为了将来参考,请仔细检查以下内容:

  1. 确保amazon.sdktester.json 位于正确的位置。打开 Amazon App Tester,展开“JSON 文件中的 IAP 项目”部分以确保它可以读取您的 IAP 项目

  2. 根据您的发现,仔细检查 Amazon App Tester 中的配置并根据需要将所有内容重置为默认值

  3. 将您的应用设置为sandbox mode

    adb shell setprop debug.amazon.sandboxmode debug
    
    1. 确保ProGuard is setup properly(或暂时禁用它以帮助隔离问题)

    2. 使用其中一个 IAP 示例进行测试,以隔离 Amazon App Tester 的任何配置问题。示例应用程序应按原样运行,无需任何修改(上面的步骤 1-3 仍然相关)。

    希望有帮助~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2017-12-08
    • 2016-09-10
    • 1970-01-01
    • 2016-11-26
    • 2012-12-08
    相关资源
    最近更新 更多