unity services purchase publicacion plugin play modo integradas iap google games firmar compras app c# android unity3d in-app-purchase soomla

c# - services - Error de Google Play al realizar una compra al implementar el complemento Soomla Unity3d



unity firmar en modo publicacion (4)

Estoy creando una aplicación que implementa el complemento Soomla Unity IAP. En mi esfuerzo por hacer funcionar el IAP, he llegado al punto en el que puedo hacer una compra cuando estoy en el editor. (No es una compra real, solo actualiza la moneda virtual que el usuario puede comprar / gastar en el juego).

Cuando inicio esto en un dispositivo Android, aparece este error: se requiere autenticación. Debes iniciar sesión en tu cuenta de Google.

Ahora he leído varios artículos diferentes donde la gente ha tenido este problema y nada parece ayudarme.

Aquí hay una lista de lo que he intentado hasta ahora:

1) Asegúrese de que la aplicación se publique en versión alfa o beta para realizar pruebas (ahora en alfa)

2) Asegúrese de que los precios coincidan para el juego y en la consola de desarrollador.

3) Use un dispositivo que haya iniciado sesión como usuario que no esté usando el correo electrónico del desarrollador.

4) Asegúrese de que el correo electrónico en el dispositivo de prueba esté listado como un probador en la consola de desarrollador.

5) Asegúrese de que los permisos necesarios estén enumerados en el Manifiesto de Android.

6) Confirmar que la cuenta mercantil esté configurada correctamente y verificada.

7) Asegúrese de compilar como versión y no como desarrollo (no estoy seguro de si esto incluso importa, pero lo intenté en ambos sentidos).

8) Eliminó por completo todo el complemento de Soomla del proyecto y luego lo volvió a agregar mientras seguía el tutorial muy de cerca solo para asegurarse de que no se perdiera nada pequeño. Todavía no hay dados.

Tengo los componentes centrales y de la tienda agregados a la escena en los que son necesarios. Por favor, avíseme si tiene alguna otra idea de lo que debería hacer para solucionar este problema. Mientras tanto, aquí está el código StoreAssets.cs que uso para configurar Soomla:

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) ) ); }

Para comprar Artículos, llamo:

StoreInventory.BuyItem("the id of my item");

Para usar un artículo que ha sido comprado, llamo a:

StoreInventory.TakeItem("the id of my item");

StoreInventory es una clase que se incluye en Soomla cuando se importa a Unity.

Aquí está el código donde se realiza la compra y el consumo del artículo:

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); } }

26/8/15

Ahora he creado tanto un grupo de google como una comunidad de google para probar esta aplicación. Agregué el correo electrónico de mi otro dispositivo Android a ambos y usé el enlace proporcionado para descargar la aplicación. Hacer todo esto todavía resultó en el mismo error que antes.

27/08/15

Me di cuenta de que mi tarjeta de crédito en mi cuenta de comerciante había expirado. Uno de los artículos que leí mencionaba tener problemas como este si había problemas con la cuenta del comerciante. He actualizado la información y ahora tengo que esperar el depósito que pondrán en mi cuenta para asegurarse de que esté funcionando. Una vez hecho esto, actualizaré si esto solucionó mi problema actual.

31/8/15

Después de verificar finalmente mi cuenta mercantil en Google Play, todavía parezco tener el mismo problema. La reparación de mi cuenta de comerciante no cambió nada de lo que no podía decir.

Acabo de actualizar mi publicación para incluir todo el script StoreAssets.cs y lo que uso para hacer compras y consumir elementos cuando un jugador los usa. Añadí esto ya que no tengo idea de qué más podría ser el problema.

7/7/15

Todavía sin suerte hasta el momento. El problema persiste en Android. El editor en sí mismo realiza compras de prueba, pero las compras no se pueden hacer desde un dispositivo Android sin obtener el mismo error que el mencionado anteriormente.

9/9/15

Solo como una actualización rápida, intenté construir el proyecto sin la construcción de desarrollo seleccionada en la configuración de construcción y envié el enlace a todas las personas de mi comunidad de Google para intentarlo. Todos siguen teniendo el mismo error que mi dispositivo de prueba.

11/09/15

Después de probar algunas cosas que Tony señaló, me di cuenta de que no se llama a la función onBillingSupported () cuando uso esto: StoreEvents.OnBillingSupported + = onBillingSupported; Todavía no estoy seguro de por qué.

12/09/15

Después de pasar por el tutorial en el sitio de soomla, he hecho todo lo que dijo excepto iniciar el Iab en segundo plano y la protección contra el fraude, ya que no son necesarios. el método onBillingSupported aún no se llama y sigo recibiendo el mismo error que antes en los dispositivos Android.

12/09/15

Acabo de eliminar todo para el complemento de Soomla e importé la versión más nueva y seguí las instrucciones nuevamente y sigo teniendo el mismo error.

16/9/15

Realmente no tengo idea de lo que me falta aquí. Después de eliminar todo el complemento Soomla y luego agregarlo de nuevo y aún obtener el mismo error después de múltiples intentos. He seguido todo como dice el tutorial y tengo todo el código anterior.


¿Intentó comprar productos de otro dispositivo? He tenido este problema antes, pero no recuerdo cómo lo solucioné. Por lo que recuerdo, cuando falló para mí, estaba trabajando en el dispositivo del otro compañero de trabajo. Pruebe probarlo en un dispositivo diferente. Además, ¿tienes varias cuentas de Google en tu dispositivo? Recuerdo que una de las cosas que probé fue eliminar todas las cuentas de Google de mi dispositivo y dejar registrada mi cuenta principal. Lamentablemente, no recuerdo si funcionó, pero espero que te ayude. si encuentra cómo solucionarlo, publique una actualización aquí. buena suerte


A partir de la breve discusión en los comentarios, parece que es posible que no haya implementado todo.

Mira este enlace: http://know.soom.la/unity/store/store_gettingstarted/

En la sección de Introducción dice:

  1. Cree su propia implementación de IStoreAssets para describir los activos específicos de su juego.

  2. Inicializa SoomlaStore con la clase que acabas de crear:

SoomlaStore.Initialize (nuevo YourStoreAssetsImplementation ());

Inicialice SoomlaStore en la función de Inicio de MonoBehaviour y NO en la función Despertar. SOOMLA tiene su propio MonoBehaviour y necesita estar "Despertado" antes de que se inicialice.

Inicialice SoomlaStore SOLAMENTE UNA VEZ cuando se carga su aplicación.

La inicialización también se confirma en esta página. http://know.soom.la/unity/store/store_istoreassets/

Esto dice que no es obligatorio, pero parece útil

Si tiene su propia tienda implementada dentro de su juego, se recomienda que abra el servicio IAB en segundo plano cuando la tienda se abra y la cierre cuando la tienda esté cerrada.

// Inicie Iab Service SoomlaStore.StartIabServiceInBg ();

// Stop Iab Service SoomlaStore.StopIabServiceInBg ();

Esto no es obligatorio, su juego funcionará sin esto, pero lo recomendamos porque mejora el rendimiento. La idea aquí es iniciar de forma preventiva el proceso de configuración de facturación en la aplicación con los servidores de Google (o de Amazon).

Podría intentar agregar el registro al evento de inicialización para asegurarse de que se esté inicializando. Aquí hay una lista de eventos que puede intentar iniciar sesión desde ...

http://know.soom.la/unity/store/store_events/

NOTA: Una cosa que debe observar es que si desea escuchar el evento OnSoomlaStoreInitialized, debe configurar el oyente antes de inicializar SoomlaStore. Entonces deberás hacer:

StoreEvents.OnSoomlaStoreInitialized + = onSoomlaStoreInitialized;

antes de

Soomla.SoomlaStore.Initialize (nuevo Soomla.Example.MuffinRushAssets ());

También puede configurar el evento OnBillingSetup con algunos registros para asegurarse de que esté inicializando su facturación correctamente.

StoreEvents.OnBillingSupported + = onBillingSupported;

public void onBillingSupported () {// ... su implementación específica del juego aquí ...}


En mi caso, no me di cuenta de que lo que estaba usando para mi ID de artículo y mi ID de producto estaban mezclados. La identificación del artículo es solo para identificar el artículo dentro de soomla, la identificación del producto es la misma que yo, configurada en google play.


Nunca tuve el problema que describes. Sin embargo, creé una comunidad privada de Google+ y agregué la comunidad como evaluadores. Cambié mi aplicación a Beta. E invité a personas a mi comunidad privada donde había un enlace para descargar la aplicación y probarla. Fue fácil.

El segundo punto es tu código de arriba. Está buscando 4 productos y 3 paquetes de divisas, pero el código no refleja eso. Tal vez solo pegaste la mitad de la clase.

Finalmente, vea si este hilo ayudará: http://answers.soom.la/t/solved-some-clarification-about-iab-testing/2067/8

Por cierto, SOOMLA tiene un sitio dedicado answers.soom.la para problemas relacionados con SOOMLA.