Android InApp计费错误:IAB活动结果中的数据为空

Android InApp计费错误:IAB活动结果中的数据为空,android,Android,我一直在 IAB活动结果中的空数据 我正在尝试使用Android这个简单的例子在我的应用程序中实现应用内计费。我做错了什么 public class Donate extends AppCompatActivity { private static final String TAG = "TAG HERE"; IabHelper mHelper; static final String ITEM_SKU = "android.test.purchased"; private T

我一直在

IAB活动结果中的空数据

我正在尝试使用Android这个简单的例子在我的应用程序中实现应用内计费。我做错了什么

public class Donate extends AppCompatActivity {
private static final String TAG =
        "TAG HERE";
IabHelper mHelper;
static final String ITEM_SKU = "android.test.purchased";

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    this.setContentView(R.layout.activity);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            finish();
        }
    });

    //Google play purchase test
    String base64EncodedPublicKey =
            "<My base 64 key>";
    mHelper = new IabHelper(this, base64EncodedPublicKey);
    Button button = (Button) findViewById(R.id.donate_btn);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mHelper.launchPurchaseFlow(Donate.this, ITEM_SKU, 10001,
                    mPurchaseFinishedListener, "mypurchasetoken");
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data)
{
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
公共类活动{
私有静态最终字符串标记=
“此处标记”;
艾伯曼帮助者;
静态最终字符串项\u SKU=“android.test.purchased”;
专用工具栏;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
此.supportRequestWindowFeature(Window.FEATURE\u无\u标题);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
this.setContentView(R.layout.activity);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
toolbar.setNavigationOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
完成();
}
});
//谷歌游戏购买测试
字符串base64EncodedPublicKey=
"";
mHelper=新的IABHeloper(此,base64EncodedPublicey);
Button Button=(按钮)findViewById(R.id.donate\u btn);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mHelper.launchPurchaseFlow(捐赠,此,项目库存单位,10001,
mppurchasefinishedlistener,“mypurchasetoken”);
}
});
}
@凌驾
ActivityResult上受保护的void(int请求代码、int结果代码、,
意图(数据)
{
如果(!mHelper.handleActivityResult)(请求代码,
结果代码,数据){
super.onActivityResult(请求代码、结果代码、数据);
}
}

<>代码> 既然你开始了,我也建议保持关注。它在DEV预览中,但是我会考虑它,只是为了更容易迁移。

正如Kavach所说,检查您是否添加了产品。 加上这个,告诉我们你得到了什么:

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
   public void onIabSetupFinished(IabResult result) {
      if (!result.isSuccess()) {
         Log.d(TAG, "Problem setting up In-app Billing: " + result);
      }
   }
});
最后,请记住在onDestroy中处理帮助程序:

if (mHelper != null) mHelper.dispose();

您似乎尚未在Google Play开发者控制台上创建产品。请查看以下教程以帮助您完成此过程。这些是在Android Studio中实施应用内计费的分步指南:


您是否在google play store帐户上创建了该产品?您在做什么样的测试?closed alpha或其他?我正在使用
静态最终字符串项\u SKU=“android.test.purchased”;
我仍在调试模式下测试我正在使用静态最终字符串项\u SKU=“android.test.purchased”我是否也需要为此创建产品?是的。您需要为后端的每个SKU_ID创建一个产品。请参阅教程。它们将对您大有帮助。请逐步遵循它们。既然您有测试产品,请让我们知道startSetup的结果,如果这解决了您的问题,请接受答案。