Android 安卓IAP可以';在测试过程中找不到项目
我目前正在为我制作的一款基于Unity的Android游戏设置应用内账单,我正在使用插件来实现这一点。我现在只在谷歌Play商店进行测试 我已经通过开发者控制台发布了应用内产品;我正在使用一个发布为Beta版的APK;我正在一台设备上测试游戏,在该设备上,主要电子邮件是指定的测试人员之一,我将测试响应设置为LICENSE(许可),以防万一 使用OpenIAB时,我基本上只需调用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”。我不完全确定必须传递哪种形式的字符串
OpenIAB.purchaseProduct(string)
函数并传递“SKU”。我不完全确定必须传递哪种形式的字符串,但到目前为止,我一直在尝试以下组合:
- “sku_名称”
- “com.CompanyName.ProductName.sku\u名称”
- “com.companyname.productname.sku\u名称”
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);
}