Google应用内结算,从服务器检索信息时出错[DF-DFERH-01]

时间:2017-11-24 09:37:27

标签: android billing in-app

我正在测试谷歌的应用内结算。我使用IabHelper按照谷歌应用内结算培训的指示。

我成功设置了IabHelper。

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            Log.d("GooglePay", "Setup finished.");

            if (!result.isSuccess()) {
                // Oh no, there was a problem.
                Log.d("GooglePay", "Problem setting up in-app billing: " + result);
                return;
            }

            // Have we been disposed of in the meantime? If so, quit.
            if (mHelper == null) return;

            mBroadcastReceiver = new IabBroadcastReceiver(GooglePayPlugin.this);
            IntentFilter broadcastFilter = new IntentFilter(IabBroadcastReceiver.ACTION);
            mActivity.registerReceiver(mBroadcastReceiver, broadcastFilter);
        }
    });

然后,我打电话给IabHelper的购买API。

try {
     mHelper.launchPurchaseFlow(mActivity, productID, RC_REQUEST,
                mPurchaseFinishedListener, payload);
} catch (IabAsyncInProgressException e) {
     Log.d("GooglePay", "Error launching purchase flow. Another async operation in progress.");
}

但是,我总是有一个弹出窗口说:"从服务器检索信息时出错。[DF-DFERH-01]",如下图所示。 enter image description here

已经获得了logcat信息。

2 个答案:

答案 0 :(得分:1)

请使用以下步骤检查您的代码:

STEP:1 使用sdk managersdk tool更新了Google Play Billing Library Google play services {/ 1}}

STEP:2 创建一个Android项目并为您的Android项目的清单文件添加结算权限。

<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />

STEP:3  将AIDL文件添加到项目中

  

1.右击你的app-level文件夹&gt;&gt;文件夹&GT;&GT; AIDL文件夹

     

2.针对应用内结算的示例创建目录或文件夹或包 - &gt; com.android.vending.billing

     

3.然后在此包中复制粘贴文件

     

完成所有这些操作后,您将在其他InApp结算中收到错误消息   像IabHelper这样的支持类用于导入它   InAppBillingService.aidl,要解决它,请转到build.gradle和   重新调整你的目录com.android.vending.billing不是   com.android.vending.billing目录或时的格式正确   包创建

     

像:

     

sourceSets {main {aidl.srcDirs = ['src / main / aidl']}}

STEP:3 更新build.gradle文件中的依赖项

STEP:4 使用Google Play启动连接

(确保 base64EncodedPublicKey 适合您的产品)

Base64EncodedPublicKey 表示your license key from google play console

 /************Setting Up Google Play Billing in the Application***************/
    mHelper = new IabHelper(this, base64EncodedPublicKey);

    // enable debug logging (for a production application, you should set this to false).
    // mHelper.enableDebugLogging(true);
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(@NonNull IabResult result) {
            if (!result.isSuccess()) {
                Log.d(TAG, "In-app Billing setup failed: " + result);
                complain("In-app Billing setup failed:: " + result);

            } else {
                Log.d(TAG, "In-app Billing is set up OK");
            }
        }
    });
    /************Setting Up Google Play Billing in the Application***************/

STEP:5

出于测试目的,请使用以下item_sku:

static final String ITEM_SKU = "android.test.purchased";
static final int RC_REQUEST = 10001;

如果您正在创建实时使用活ProductID

STEP:6

  1. 实施onActivityResult处理结果的方法

    @Override
    protected void onActivityResult(int requestCode, int resultCode,Intent data)
    {
    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
    } 
    
  2. 实施OnIabPurchaseFinishedListener

  3. 实施QueryInventoryFinishedListener

  4. 实施OnConsumeFinishedListener

  5. STEP:7

    确保您的设备已更新Google play services

    STEP:8

    调用IabHelper的购买API。

     mHelper.launchPurchaseFlow(mActivity, ITEM_SKU,
                  RC_REQUEST,mPurchaseFinishedListener, mPayload);
    

    STEP:9  如需更多信息,请参考以下链接:

    https://developer.android.com/google/play/billing/billing_integrate.html#billing-permission

    https://developer.android.com/google/play/billing/billing_library.html#connecting

    我希望这会对你有所帮助。

答案 1 :(得分:0)

我最终解决了这个问题,把答案放在这里,希望能帮助那些遇到像我这样的问题的人。

mHelper.launchPurchaseFlow(mActivity,productID,RC_REQUEST,                     mPurchaseFinishedListener,payload);

“payLoad”参数太长,我将有效负载设置为空字符串,然后问题解决了,不再有df-dferh-01。

它与VPN无关,与谷歌库无关,只是因为有效载荷对于谷歌播放服务界面来说太长了。