una subir play paga los gratis google descargar desarrolladores cuesta cuanto como app aplicacion actualizar android amazon-appstore

subir - Soporte de enlaces de Amazon and Android market(Google Play) dentro de la aplicación



google play console (7)

Así que una de mis aplicaciones fue rechazada en la tienda de aplicaciones de Amazon hoy. La razón fue porque dentro de mi aplicación, me vinculé a la versión de pago de la aplicación en el mercado de Android. Decepcionante, pero como sea, supongo que todos quieren su corte ...

Así que ahora me queda tener que modificar la aplicación para cambiar el enlace de Android Market a un enlace de la tienda de aplicaciones de Amazon. No es realmente un gran problema, excepto por ahora, si hago eso, me quedo con una discrepancia cuando quiero volver a cargar una versión más reciente en el mercado de Android. Después de todo, sería bastante tonto vincular a alguien a la tienda de aplicaciones de Amazon si compran la aplicación en el mercado de Android.

Ahora todos sabemos que es un problema soportar / administrar múltiples versiones de la misma aplicación. En consecuencia, mi pregunta se convierte en ¿cómo puedo enlazar a ambos al mismo tiempo? ¿Hay alguna forma de saber desde dónde se descargó una aplicación para poder codificar ambos enlaces en la aplicación y así señalar al usuario automáticamente a uno u otro? En segundo lugar, ¿está en contra de los Términos de Servicio de Amazon para dar al usuario una opción (digamos que en cambio, abro un cuadro de diálogo y pregunto al usuario desde dónde descargar)?

Gracias a todos.

Edición: Directo del servicio al cliente de Amazon "Re: Enlace a ambos mercados" (Me gustaría que el proceso de aprobación fuera tan rápido como estos chicos):

Por el momento, necesitamos cualquier enlace para apuntar a Amazon Appstore solo para enlaces de mercado. Está permitido enlazar a su sitio web, pero no a otros mercados.

Cuando apunte a otras aplicaciones desde su aplicación, incluidas las ventas de productos adicionales, la finalización de la compra debe realizarse en Amazon Appstore.


¡Buenas noticias! Apparently la última versión de la tienda de Amazon finalmente establece PackageManager.getInstallerPackageName() en "com.amazon.venezia" para contrastar con "com.android.vending" Google Play. Esta será la forma más fácil de determinar si su aplicación se descarga, se instala desde Amazon o se instala desde Google.


Como dijiste, podrías usar un booleano y luego ser forzado a construir tus aplicaciones dos veces, así que creo que no es la mejor manera.

La mejor manera es verificar si Android Market está instalado y actuar en consecuencia: here .

Otra forma aún más compleja es consultar el nombre del instalador de su aplicación, utilizando PackageManager.getInstallerPackageName() . Esto requiere trabajo adicional, ya que la aplicación puede ser instalada por mercados paralelos incluso si está en un dispositivo Android con Android Market instalado, y también debe verificar si está instalada como debug / development (en este caso, el nombre del paquete del instalador es nulo).


Esto es lo que puedes hacer:

  1. Completa la preparación y firma de tu solicitud.
  2. Instálalo en tu dispositivo de prueba
  3. Utilice PackageManager.getPackageInfo

Como hacer esto:

public static boolean isMarket(Context context){ boolean isMarketSig = false; int currentSig = 1; try { Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; for (Signature sig : sigs) { currentSig = sig.hashCode(); Log.i("MyApp", "Signature hashcode : " + sig.hashCode()); // This Log is for first time testing so you can find out what the int value of your signature is. } } catch (Exception e){ e.printStackTrace(); } //-1545485543 was the int I got from the log line above, so I compare the current signature hashCode value with that value to determine if it''s market or not. if (currentSig==-1545485543){ isMarketSig = true; } else { isMarketSig = false; } return isMarketSig; } public static void openStore(Context context){ if (isMarket(context)){ Intent goToMarket = new Intent(Intent.ACTION_VIEW,Uri.parse("market://d" + "etails?id=com.jakar.myapp")); goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(goToMarket); } else { Intent goToAppstore = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.amazon.com/gp/mas/dl/andro" + "id?p=com.jakar.myapp")); goToAppstore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(goToAppstore); } }

Básicamente, el código de hash () que obtiene de la aplicación instalada en su dispositivo de prueba será el mismo del mercado. El código hash de la tienda de aplicaciones será diferente porque, según https://developer.amazon.com/help/faq.html , la tienda de aplicaciones firma la aplicación con una firma específica para su cuenta de desarrollador, por lo que devolverá un código diferente. Valora eso con lo que realmente lo firmaste.

Nota: funciona para abrir el mercado con éxito, pero aún no he implementado este método en la App Store, por lo que no lo he probado por completo. Confío en que funcionará, pero no puedo garantizarlo, así que si usa lo que he sugerido y falla, no me exija rendir cuentas.



Qué manera más difícil de hacer esto. Si solo desea abrir la URL del mercado, simplemente verifique si la intención con la URL para Android Market tiene alguna actividad que sepa cómo manejarlo. Si no es así, abre la tienda de aplicaciones de Amazon con otra intención.

/** * Returns intent that opens app in Google Play or Amazon Appstore * @param context * @param packageName * @return null if no market available, otherwise intent */ public static Intent showApp(Activity activity, String packageName) { Intent i = new Intent(Intent.ACTION_VIEW); String url = "market://details?id=" + packageName; i.setData(Uri.parse(url)); if (isIntentAvailable(activity, i)) { return i; } i.setData(Uri.parse("http://www.amazon.com/gp/mas/dl/android?p=" + packageName)); if (isIntentAvailable(activity, i)) { return i; } return null; } public static boolean isIntentAvailable(Context context, Intent intent) { final PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; }

Otra forma es construir utilizando hormigas. De esta manera, puede generar dinámicamente una clase java con constantes establecidas en un valor que represente el mercado de aplicaciones y generar compilaciones diferentes con facilidad. Sin embargo, esto requiere algo de aprendizaje, pero cuando lo tienes en funcionamiento, es muy fácil.


Simplemente refactorice la mayor parte de su proyecto en una Biblioteca de proyectos, y luego cree múltiples proyectos (por ejemplo, para cada tienda de aplicaciones) que solo tienen recursos únicos de íconos y cadenas, su propia ID de paquete declarada en el manifiesto, y luego una actividad principal que extiende la Actividad principal que has definido en tu biblioteca.

De esa manera, se pueden proporcionar todas las URL únicas al anular, en la actividad de cada proyecto de aplicación en particular, los métodos virtuales o abstractos definidos en la actividad principal de su biblioteca. El código de la biblioteca que muestra estas URL puede obtenerlas a través de una llamada polimórfica a cada uno de esos métodos.

De esa manera, cada proyecto especializado será muy pequeño y el mantenimiento será principalmente para su biblioteca, como se describe aquí:

Múltiples aplicaciones con una base de código compartida


También estaba luchando con esto, pero decidí que el éxito instantáneo que estoy viendo con mi aplicación gratuita en Amazon garantiza el tiempo para crear un segundo conjunto de .apks cuando realice una nueva compilación. Fui con la bandera booleana de Amazon por ahora, y creo una versión común, luego una versión incrementada en una para el mercado de Amazon. Ningún otro mercado exige enlaces internos, AFAIK.

Finalmente, tengo la intención de codificar un selector de mercado con una forma elegante de averiguar automáticamente qué hacer, pero hay muchas variables, no solo la dirección de mercado de una aplicación, sino la forma en que los diferentes mercados reconocen el nombre de la empresa para encontrar todas las aplicaciones. . Algunas aplicaciones de mercado secuestran el protocolo principal de Android Market (por ejemplo, Appslib y SlideMe si recuerdo bien) pero no almacenan el nombre de la empresa de la misma manera. Luego, debe decidir a dónde van los enlaces de ventas adicionales: al mismo mercado oa uno común (solo envié mi aplicación gratuita a la mayoría de los mercados que uso).

Estoy esperando a que se apruebe mi aplicación de pago, pero estoy bastante seguro de que valdrá la pena tenerla disponible en el mercado de Amazon dado el número de descargas que he recibido para mi aplicación gratuita.