应用内结算RESTORE_TRANSACTION提供DEVELOPER_ERROR

时间:2012-06-05 11:44:56

标签: android in-app-billing

我在我的应用中实施了应用内结算功能。 我刚刚实现了REQUEST_PURCHASE,CONFIRM_NOTIFICATION和CHECK_BILLING,它们工作正常。

现在我试图实现REQUEST_TRANSACTIONS方法,但是我有一个问题,一旦我用sendBIllingRequest发送请求,我收到RESULT_DEVELOPER_ERROR(5)的RESPONSE_CODE响应。

这就是我提出请求的方式:

    Log.d(TAG, "Action equals RESTORE_TRANSACTIONS");
Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS");
request.putLong("NONCE", BillingSecurity.newNonce());
try {
    Bundle response = mService.sendBillingRequest(request);
    int response_code = response.getInt("RESPONSE_CODE", -1);
    Log.d(TAG, "RESPONSE Restore: " + response_code);
    restored=true;
} catch (RemoteException e) {
    e.printStackTrace();
}

我在其他问题上读到,在禁用调试模式时需要启动RESTORE_TRANSACTIONS。我从Manifest中禁用它(我清除了字段,因为如果我把假LogCat没有显示任何调试打印),那么这是我的Android Manifest:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="resistorcalc.main"
  android:versionName="3.0" android:versionCode="9">
<uses-sdk android:minSdkVersion="8"></uses-sdk>

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

<application android:label="@string/app_name" android:name=".App" android:icon="@drawable/resistoricon">
    <activity android:name=".launchActivity"
              android:label="@string/app_name" android:screenOrientation="portrait" android:clearTaskOnLaunch="true" android:finishOnTaskLaunch="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:launchMode="standard" android:label="@string/app_name" android:name="SupportusActivity" android:finishOnTaskLaunch="true" android:clearTaskOnLaunch="true" android:screenOrientation="portrait"></activity>
    <activity android:launchMode="standard" android:label="@string/app_name" android:name="OhmLawActivity" android:finishOnTaskLaunch="true" android:clearTaskOnLaunch="true" android:screenOrientation="portrait"></activity>
    <activity android:launchMode="standard" android:label="@string/app_name" android:name="ResistorSumActivity" android:finishOnTaskLaunch="true" android:clearTaskOnLaunch="true" android:screenOrientation="portrait"></activity>               
    <activity android:name="com.google.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation" android:clearTaskOnLaunch="true" android:finishOnTaskLaunch="true"/>
    <service android:name=".billing.BillingService" />

    <receiver android:name=".billing.BillingReceiver">
        <intent-filter>
            <action android:name="com.android.vending.billing.IN_APP_NOTIFY" />
            <action android:name="com.android.vending.billing.RESPONSE_CODE" />
            <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" />
        </intent-filter>
    </receiver>               
</application>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

现在我的问题是:

  1. 我需要在清单上的Debuggable标志上放置false吗?或者我只需要运行该应用程序。
  2. 如果debuggable为false,为什么logcat不会显示任何Log。*消息?这是一种正常的行为(我在eclipse中使用logcat)
  3. 如果我使用像android.test.purchased这样的静态请求,可以使用RESTOrE_TRANSACTIONS检索它们吗?
  4. 我是否需要在我的市场上传草稿以使该方法有效?
  5. 谢谢, 伊万

1 个答案:

答案 0 :(得分:5)

清单中的调试标志与此无关。您需要使用发布密钥对应用进行签名,然后将草稿上传到Play商店。您可能需要等待一个小时左右才能激活它。不,RESTORE_TRANSACTIONS不适用于测试项目,您需要使用自己的已发布项目。所有这些都是described in the reference,如果你遵循它,你不应该有任何问题。