当我在Android设备上启动时,会出现以下错误:需要进行身份验证。您需要登录您的Google帐户。 现在我已经阅读了多篇文章,其中人们遇到了这个问题,但似乎没有什么帮助我解决问题。
以下是我迄今为止尝试过的内容清单:
1)确保应用程序发布到测试的alpha或beta版本中。(现在处于alpha状态)
2)确保游戏和开发者控制台中的价格匹配。
3)使用已登录为未使用开发者电子邮件的用户的设备。
4)确保测试设备上的电子邮件在开发者控制台中列为测试人员。
5)确保在Android清单中列出了必要的权限。
6)确认正确设置并验证了商家帐户。
7)确保构建为发布版而不是开发版(不确定这是否重要,但我尝试了两种方式)。
8)完全从项目中删除了所有Soomla插件,然后再按照教程非常仔细地将其添加回来,以确保没有遗漏。但仍然没有成功。
我已经将核心和商店组件添加到它们必要的场景中。如果您有其他想法来解决这个问题,请告诉我。同时,以下是我用于设置Soomla的StoreAssets.cs代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Soomla.Store;
public class StoreAssets : IStoreAssets
{
public static bool purchased = false;
public int GetVersion()
{
return 0;
}
public void onItemPurchased(PurchasableVirtualItem pvi, string payload)
{
purchased = true;
}
public VirtualCurrency[] GetCurrencies()
{
return new VirtualCurrency[]{TOKEN_CURRENCY};
}
public VirtualGood[] GetGoods()
{
return new VirtualGood[] {BACKUP_FORCEFIELD, IMMUNITY, EMP, MULTIPLIER};
}
public VirtualCurrencyPack[] GetCurrencyPacks()
{
return new VirtualCurrencyPack[] {FIVE_TOKEN_PACK, TEN_TOKEN_PACK, FIFTY_TOKEN_PACK};
}
public VirtualCategory[] GetCategories()
{
return new VirtualCategory[]{};
}
/** Virtual Currencies **/
public static VirtualCurrency TOKEN_CURRENCY = new VirtualCurrency
(
"Token", // Name
"Token currency", // Description
"token_currency_ID" // Item ID
);
/** Virtual Currency Packs **/
public static VirtualCurrencyPack FIVE_TOKEN_PACK = new VirtualCurrencyPack
(
"5 Tokens", // Name
"5 token currency units", // Description
"5_tokens_id", // Item ID
5, // Number of currencies in the pack
"token_currency_ID", // ID of the currency associated with this pack
new PurchaseWithMarket
( // Purchase type (with real money $)
"tokens_5_PROD_ID", // Product ID
0.99 // Price (in real money $)
)
);
public static VirtualCurrencyPack TEN_TOKEN_PACK = new VirtualCurrencyPack
(
"10 Tokens", // Name
"10 token currency units", // Description
"10_tokens_id", // Item ID
10, // Number of currencies in the pack
"token_currency_ID", // ID of the currency associated with this pack
new PurchaseWithMarket
( // Purchase type (with real money $)
"tokens_10_PROD_ID", // Product ID
1.99 // Price (in real money $)
)
);
public static VirtualCurrencyPack FIFTY_TOKEN_PACK = new VirtualCurrencyPack
(
"50 Tokens", // Name
"50 token currency units", // Description
"50_tokens_id", // Item ID
50, // Number of currencies in the pack
"token_currency_ID", // ID of the currency associated with this pack
new PurchaseWithMarket
( // Purchase type (with real money $)
"tokens_50_PROD_ID", // Product ID
4.99 // Price (in real money $)
)
);
/** Virtual Goods **/
public static VirtualGood BACKUP_FORCEFIELD = new SingleUseVG
(
"BackupForcefield", // Name
"Secondary forcefield for extra protection.", // Description
"bff_ID", // Item ID
new PurchaseWithVirtualItem
( // Purchase type (with virtual currency)
"token_currency_ID", // ID of the item used to pay with
1 // Price (amount of coins)
)
);
public static VirtualGood EMP = new SingleUseVG
(
"Emp", // Name
"Clear the surrounding space of all lasers.", // Description
"emp_ID", // Item ID
new PurchaseWithVirtualItem
( // Purchase type (with virtual currency)
"token_currency_ID", // ID of the item used to pay with
5 // Price (amount of coins)
)
);
public static VirtualGood IMMUNITY = new SingleUseVG
(
"Immunity", // Name
"Immune to damage.", // Description
"immunity_ID", // Item ID
new PurchaseWithVirtualItem
( // Purchase type (with virtual currency)
"token_currency_ID", // ID of the item used to pay with
10 // Price (amount of coins)
)
);
public static VirtualGood MULTIPLIER = new SingleUseVG
(
"Multiplier", // Name
"Double your score per deflected laser.", // Description
"multiplier_ID", // Item ID
new PurchaseWithVirtualItem
( // Purchase type (with virtual currency)
"token_currency_ID", // ID of the item used to pay with
15 // Price (amount of coins)
)
);
}
为了购买物品,我调用:
StoreInventory.BuyItem("the id of my item");
使用已购买的物品,我调用:
StoreInventory.TakeItem("the id of my item");
StoreInventory 是 Soomla 导入 Unity 时包含的一个类。
下面是购买和物品消耗的代码实现:
public class Purchase : MonoBehaviour
{
public Text tokens;
public static bool bffFilled = false,
immFilled = false, empFilled = false,
multFilled = false, init = false;
void Start()
{
if (!init)
{
init = true;
SoomlaStore.Initialize(new StoreAssets());
}
Token.updateTokens (tokens);
}
void Update()
{
if (StoreEvents.balanceChanged)
{
StoreEvents.balanceChanged = false;
Token.updateTokens(tokens);
}
}
public void BuyItem (int item)
{
if (item == 1)
{
StoreInventory.BuyItem (StoreAssets.FIVE_TOKEN_PACK.ItemId);
}
else if (item == 2)
{
StoreInventory.BuyItem (StoreAssets.TEN_TOKEN_PACK.ItemId);
}
else if (item == 3)
{
StoreInventory.BuyItem (StoreAssets.FIFTY_TOKEN_PACK.ItemId);
}
Token.updateTokens(tokens);
}
public void getUpgrade(int upgrade)
{
if (upgrade == 1)
{
bool bffNotBought = PlayerPrefs.GetInt("Bff Available", 0) == 0;
if (StoreAssets.TOKEN_CURRENCY.GetBalance() >= 1 && bffNotBought)
{
PlayerPrefs.SetInt("Bff Available", 1);
PlayerPrefs.Save();
bffFilled = true;
StoreInventory.TakeItem(StoreAssets.TOKEN_CURRENCY.ItemId, 1);
}
}
else if (upgrade == 2)
{
bool empNotBought = PlayerPrefs.GetInt("Emp Available", 0) == 0;
if (StoreAssets.TOKEN_CURRENCY.GetBalance() >= 5 && empNotBought)
{
PlayerPrefs.SetInt("Emp Available", 1);
PlayerPrefs.Save();
empFilled = true;
StoreInventory.TakeItem(StoreAssets.TOKEN_CURRENCY.ItemId, 5);
}
}
else if (upgrade == 3)
{
bool immNotBought = PlayerPrefs.GetInt("Imm Available", 0) == 0;
if (StoreAssets.TOKEN_CURRENCY.GetBalance() >= 10 && immNotBought)
{
PlayerPrefs.SetInt("Imm Available", 1);
PlayerPrefs.Save();
immFilled = true;
StoreInventory.TakeItem(StoreAssets.TOKEN_CURRENCY.ItemId, 10);
}
}
else if (upgrade == 4)
{
bool multNotBought = PlayerPrefs.GetInt("Mult Available", 0) == 0;
if (StoreAssets.TOKEN_CURRENCY.GetBalance() >= 15 && multNotBought)
{
PlayerPrefs.SetInt("Mult Available", 1);
PlayerPrefs.Save();
multFilled = true;
StoreInventory.TakeItem(StoreAssets.TOKEN_CURRENCY.ItemId, 15);
}
}
Token.updateTokens (tokens);
}
}
8/26/15
我现在已经为测试这个应用程序创建了一个谷歌组和谷歌社区。我将我的另一个Android设备的电子邮件地址添加到了这两个地方,并使用提供的链接下载了应用程序。然而,尽管我做了所有这些事情,仍然出现了与以前相同的错误。
8/27/15
我刚刚注意到我在商户账户上的信用卡已经过期了。我阅读的一篇文章提到,如果商户账户有问题,就可能出现这样的问题。我已经更新了信息,现在必须等待他们放入我的账户的存款,以确保它正常工作。一旦这样做完了,我会更新是否解决了我的当前问题。
8/31/15
在最终验证了我的Google Play商户账户之后,我似乎仍然有同样的问题。修复商户账户并没有改变任何我所能察觉到的东西。
我刚刚更新了我的帖子,包括我整个StoreAssets.cs脚本以及当玩家使用物品时我用来购买和消耗物品的内容。我增加了这个,因为我不知道问题还可能是什么。
9/7/15
到目前为止仍然没有好运。问题在Android上仍然存在。编辑器本身可以进行测试购买,但是在Android设备上使用时却出现相同的错误。
9/9/15
只是一个快速的更新,我已经尝试在构建设置中不选择开发版本并向我谷歌社区的所有人发送了链接,以便他们试一试。每个人仍然有与我的测试设备相同的错误。
9/11/15
经过尝试Tony指出的一些东西后,我注意到当我使用这个函数时 onBillingSupported() 没有被调用: StoreEvents.OnBillingSupported += onBillingSupported; 我还不确定为什么会这样。
9/12/15
在浏览soomla网站上的教程之后,我做到了除了在后台启动Iab和欺诈保护之外的一切,因为它们不是必需的。onBillingSupported方法仍然没有被调用,并且在Android设备上仍然出现相同的错误。
9/12/15
我刚刚删除了Soomla插件中的所有内容,并导入了最新版本,并再次按照说明进行,但是仍然出现相同的错误。
9/16/15
真的不知道我在这里缺少什么。在多次尝试之后,删除了所有Soomla插件,然后再次添加它们,仍然出现相同的错误。我已经按照教程所说的做了一切,并且拥有上述所有代码。