Andorid结算回复代码5

时间:2018-04-24 04:05:33

标签: java android google-play in-app-purchase

我让我的应用内结算工作,但后来我移动了一些代码以获得更大的可扩展性并且它已经崩溃了。基本上我试图做的是为我的广告制作一个适配器,以便以后用更少的编程工作来添加它们更容易。我的项目在清单中具有结算权限,并配置为在Google Play商店中进行结算,因此不是问题。

AdOnsActivity

public class AdOnsActivity extends AppCompatActivity {
    private IInAppBillingService mService;
    private ServiceConnection mServiceConn = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService = null;
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mService = IInAppBillingService.Stub.asInterface(service);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ad_ons);

        Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
        serviceIntent.setPackage("com.android.vending");
        bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

        listAdOns = findViewById(R.id.listAdOns);

        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                try {
                    ...
                    listAdOns.setAdapter(new AdOnAdapter(AdOnsActivity.this, json.getJSONArray("adOns"), mService));
                } catch (Exception e) {
                    Toast.makeText(AdOnsActivity.this, getResources().getString(R.string.error_load_ad_ons), Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                    finish();
                }
            }
        });
    }

AdOnAdapter

public class AdOnAdapter extends BaseAdapter {
    public AdOnAdapter(Activity activity, JSONArray adOns, IInAppBillingService mService) throws RemoteException {
        Bundle querySkus = new Bundle();

        this.activity = activity;
        this.adOns = adOns;
        this.mService = mService;

        skuDetails = mService.getSkuDetails(3, activity.getPackageName(), "inapp", querySkus);
        responseDetails = skuDetails.getInt("RESPONSE_CODE");
        ownedItems = mService.getPurchases(3, activity.getPackageName(), "inapp", null);
        responseOwned = ownedItems.getInt("RESPONSE_CODE");
    }

2 个答案:

答案 0 :(得分:0)

所有回复代码are listed here

5表示您使用无效参数调用API。你以某种方式破坏了你的API调用。也许比较旧版和新版代码下API调用的内容(你正在使用源代码控制吗?)。

  • 0。 BILLING_RESPONSE_RESULT_OK:成功
  • 1。 BILLING_RESPONSE_RESULT_USER_CANCELED:用户按下或取消了对话框
  • 2. BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE:网络连接已关闭
  • 3. BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE:请求的类型不支持结算API版本
  • 4. BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE:请求的产品无法购买
  • 5. BILLING_RESPONSE_RESULT_DEVELOPER_ERROR:提供给API的参数无效。此错误还可能表示应用程序未正确签名或未正确设置为Google Play中的应用内结算,或者其清单中没有必要的权限
  • 6. BILLING_RESPONSE_RESULT_ERROR:API操作期间发生致命错误
  • 7。 BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED:由于商品已经拥有而未能购买
  • 8. BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED:由于项目不属于,因此无法使用

答案 1 :(得分:0)

根据文档,这个错误可能是一堆东西。对我来说,这是许可用途。当我添加它们时,没有迹象表明这些电子邮件被添加到许可证测试人员列表中。我不断添加它们,更改“许可证响应”并保存,但没有任何改变。

过了一会儿,我意识到我必须在电子邮件列表中按“Enter”才能真正添加​​用户。我知道这听起来很傻,但那是我唯一的问题(至少我认为这是因为我花了一天的时间寻找原因)。

因此,如果您收到此错误并且在 Settings -> License Testing -> License testers 中没有看到任何电子邮件,那么您可能是使调试正常工作的唯一关键。