首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android IAB错误-需要认证

Android IAB错误-需要认证
EN

Stack Overflow用户
提问于 2015-01-13 11:09:30
回答 2查看 3.5K关注 0票数 4

在我的应用程序中,我在anything ()v3中遇到了一个测试问题,我不能用测试帐户购买任何东西。它总是给我显示一个Play Store对话框

代码语言:javascript
复制
"Error Authentication is required. You must log in with your Google Account"

我只能购买保留的项目"android.test.purchased“没有任何问题,并消费它。

IAB启动:

代码语言:javascript
复制
private static final int REQ_CODE_BUY = 51667;
    private static final String buyFile = "bought";

    private Activity activity;
    private ProgressDialog pD;
    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);
        }
    };

    public IABHelper(Activity activity, ProgressDialog pD){
        this.activity = activity;
        this.pD = pD;
    }

    public void start(){
        Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
        serviceIntent.setPackage("com.android.vending");
        activity.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
    }

    public void destroy(){
        if (mService != null) {
            activity.unbindService(mServiceConn);
        }   
    }

IAB购买和消费:

代码语言:javascript
复制
public void buy(String sku){
        try {
            Bundle buyIntentBundle = mService.getBuyIntent(3, activity.getPackageName(), sku, "inapp", devPayload);
            //Bundle buyIntentBundle = mService.getBuyIntent(3, activity.getPackageName(), "android.test.purchased", "inapp", devPayload);

            PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
            if(pendingIntent != null){
                activity.startIntentSenderForResult(pendingIntent.getIntentSender(), REQ_CODE_BUY, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
                pD.show();
            }
            else{
                Toast.makeText(activity, R.string.error, Toast.LENGTH_LONG).show();
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (SendIntentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void consume(final String purchaseToken){
        Thread consumeThread = new Thread(new Runnable(){

            @Override
            public void run() {
                try {
                    int response = mService.consumePurchase(3, activity.getPackageName(), purchaseToken);
                    //int response = mService.consumePurchase(3, activity.getPackageName(), "inapp:com.mumble.artplace:android.test.purchased");
                    Log.d("response", Integer.toString(response));
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        consumeThread.start();
    }

处理购买反应:

代码语言:javascript
复制
    public void resolveResponse(int requestCode, int resultCode, Intent data){
        if(requestCode == REQ_CODE_BUY){
            if(resultCode == Activity.RESULT_OK){
                int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
                String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
                String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");

                JSONObject jData;
                try {
                    if(responseCode == 0){
                        jData = new JSONObject(purchaseData);
                        String purchaseToken = jData.getString("purchaseToken");
                        String developerPayload = jData.getString("developerPayload");
                        if(developerPayload.equals(devPayload))){
                            consume(purchaseToken);
                        }
                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                pD.dismiss();
            }
            else{
                if(resultCode == Activity.RESULT_CANCELED){
                    pD.dismiss();
                }
            }
        }
    }

当发生这种情况时,我单击"OK“,它只返回一个responseCode RESULT_CANCEL和一个空临时附加的意图。我已经试着从我的设备中删除所有的帐户,只留下开发者的一个,只留下测试的帐户,并尝试使用其他的手机,但没有成功。我真的不知道我错在哪里..。请帮帮我,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-14 23:07:37

Soomla IAB error while purchasing in Game on Android这是我的问题,我认为是同样的问题,所以,问题是在Google控制台上,为了购买你必须发布apk,即使它是一个beta或者Alpha,然后,你可以用测试人员批准的帐户进行测试。

票数 6
EN

Stack Overflow用户

发布于 2015-11-02 10:38:35

在我的例子中,产品Id是错误的,来自Play商店和app SKU_NAME的产品Id在应用程序计费中应该是相同的。

在iab示例项目中没有恰当地提到哪一个是productId。

即项目中的SKU_GAS ="gas"

然后

"gas"“高级”必须在游戏商店as productId上买到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27920743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档