Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓IAP可以';在测试过程中找不到项目_Android_Unity3d_In App Purchase_Google Play - Fatal编程技术网

Android 安卓IAP可以';在测试过程中找不到项目

Android 安卓IAP可以';在测试过程中找不到项目,android,unity3d,in-app-purchase,google-play,Android,Unity3d,In App Purchase,Google Play,我目前正在为我制作的一款基于Unity的Android游戏设置应用内账单,我正在使用插件来实现这一点。我现在只在谷歌Play商店进行测试 我已经通过开发者控制台发布了应用内产品;我正在使用一个发布为Beta版的APK;我正在一台设备上测试游戏,在该设备上,主要电子邮件是指定的测试人员之一,我将测试响应设置为LICENSE(许可),以防万一 使用OpenIAB时,我基本上只需调用OpenIAB.purchaseProduct(string)函数并传递“SKU”。我不完全确定必须传递哪种形式的字符串

我目前正在为我制作的一款基于Unity的Android游戏设置应用内账单,我正在使用插件来实现这一点。我现在只在谷歌Play商店进行测试

我已经通过开发者控制台发布了应用内产品;我正在使用一个发布为Beta版的APK;我正在一台设备上测试游戏,在该设备上,主要电子邮件是指定的测试人员之一,我将测试响应设置为LICENSE(许可),以防万一

使用OpenIAB时,我基本上只需调用
OpenIAB.purchaseProduct(string)
函数并传递“SKU”。我不完全确定必须传递哪种形式的字符串,但到目前为止,我一直在尝试以下组合:

  • “sku_名称”
  • “com.CompanyName.ProductName.sku\u名称”
  • “com.companyname.productname.sku\u名称”
所有这些SKU标识符都产生了“找不到您试图购买的商品”错误消息。我确信我拼写“sku_名称”是正确的。
purchaseProduct()
及其必需变量
\u plugin
的实现如下所示(这来自OpenIAB插件源代码,而不是我):

私有静态AndroidJavaObject\u插件;
静态OpenIAB_Android(){
if(Application.platform!=RuntimePlatform.Android){
STORE_GOOGLE=“STORE_GOOGLE”;
STORE\u AMAZON=“STORE\u AMAZON”;
STORE\u TSTORE=“STORE\u TSTORE”;
STORE_SAMSUNG=“STORE_SAMSUNG”;
STORE\u YANDEX=“STORE\u YANDEX”;
返回;
}
AndroidJNI.AttachCurrentThread();
//找到插件实例
使用(var pluginClass=newandroidjavaclass(“org.onepf.openiab.UnityPlugin”)){
_plugin=pluginClass.CallStatic(“实例”);
STORE_GOOGLE=pluginClass.GetStatic(“STORE_GOOGLE”);
STORE_AMAZON=pluginClass.GetStatic(“STORE_AMAZON”);
STORE_TSTORE=pluginClass.GetStatic(“STORE_TSTORE”);
STORE_SAMSUNG=pluginClass.GetStatic(“STORE_SAMSUNG”);
STORE_YANDEX=pluginClass.GetStatic(“STORE_YANDEX”);
}
}
私有布尔IsDevice(){
if(Application.platform!=RuntimePlatform.Android){
//SendMessage(“OnBillingNotSupported”,“编辑器模式”);
返回false;
}
返回true;
}
public void purchaseProduct(字符串sku,字符串developerPayload=“”){
如果(!IsDevice()){
//编辑模式下的假购买
OpenIAB.EventManager.SendMessage(“onpurchasesuccessed”,Purchase.CreateFromSku(sku,developerPayload.Serialize());
返回;
}
_调用(“purchaseProduct”、sku、developerPayload);
}
我真的不知道
developerPayload
应该是什么。除了调用
OpenIAB.purchaseProduct()
,我没有做任何特别的事情-也许我忘记了什么


有人能提供一些指导或想法,以确保我确实要求了合适的产品吗?

如果您不确定您的Google IAP sku。 查看应用内产品选项卡下的“名称/id”下的id。 sku在括号中。例如,如果sku为“abc(def)”,则sku为“def”

因此,您只需调用OpenIAB.purchaseProduct(“def”)即可购买您的产品

我不确定这是否会影响测试,请检查谷歌开发,主要帐户 “设置/Gmail帐户,具有测试访问权限”,并将您的Gmail帐户添加到此处


希望能有所帮助。

我不确定实际的SKU名称,但确切地说我必须传递给OpenIAB.purchaseProduct()函数的是什么。事实证明,传递给它的内容实际上并不重要——您可以通过OpenIAB.mapSku()函数定义自己的自定义应用程序内SKU名称,由于示例代码不正确,我没有正确使用该函数。mapSku()获取将在代码中使用的字符串;OpenIAB插件中定义的商店名称;只有SKU ID,没有其他公司或产品参考。现在有了其他新的商店集成方式,MobiShop就是其中之一。它们为您提供了一种简单的方法来测试购买情况,并设置一个基本的商店()
private static AndroidJavaObject _plugin;

        static OpenIAB_Android() {
            if (Application.platform != RuntimePlatform.Android) {
                STORE_GOOGLE = "STORE_GOOGLE";
                STORE_AMAZON = "STORE_AMAZON";
                STORE_TSTORE = "STORE_TSTORE";
                STORE_SAMSUNG = "STORE_SAMSUNG";
                STORE_YANDEX = "STORE_YANDEX";
                return;
            }

            AndroidJNI.AttachCurrentThread();

            // Find the plugin instance
            using (var pluginClass = new AndroidJavaClass("org.onepf.openiab.UnityPlugin")) {
                _plugin = pluginClass.CallStatic<AndroidJavaObject>("instance");
                STORE_GOOGLE = pluginClass.GetStatic<string>("STORE_GOOGLE");
                STORE_AMAZON = pluginClass.GetStatic<string>("STORE_AMAZON");
                STORE_TSTORE = pluginClass.GetStatic<string>("STORE_TSTORE");
                STORE_SAMSUNG = pluginClass.GetStatic<string>("STORE_SAMSUNG");
                STORE_YANDEX = pluginClass.GetStatic<string>("STORE_YANDEX");
            }
        }

        private bool IsDevice() {
            if (Application.platform != RuntimePlatform.Android) {
                //OpenIAB.EventManager.SendMessage("OnBillingNotSupported", "editor mode");
                return false;
            }
            return true;
        }

public void purchaseProduct(string sku, string developerPayload="") {
            if (!IsDevice()) {
                // Fake purchase in editor mode
                OpenIAB.EventManager.SendMessage("OnPurchaseSucceeded", Purchase.CreateFromSku(sku, developerPayload).Serialize());
                return;
            }
            _plugin.Call("purchaseProduct", sku, developerPayload);
        }