2010-09-17 14 views
40

Actualmente tengo una aplicación de pago en la tienda. Apple no ha permitido que se envíe una versión 'lite', así que no tengo más remedio que actualizar la versión paga actual a un modelo freemium (con la compra en la aplicación). Tengo el problema de no perder funcionalidad para los usuarios de v1 que compraron la aplicación la primera vez.Convertir la aplicación paga de iOS existente en el modelo freemium con la compra en la aplicación

¿Hay alguna manera de determinar si una aplicación se ha actualizado desde una versión previamente instalada para que pueda desbloquear las partes pagas de la aplicación?

Dos preguntas similares (desde hace unos meses):

Transition an existing paid for app to free version with In App Purchase

iPhone + upgrade existing paid application on app store to free application with In App purchase + what about the customers who have already purchased the paid application

+0

posible duplicado de [Transición de una aplicación paga ya existente a versión gratuita con Compra en aplicación] (http://stackoverflow.com/questions/1575965/transition-an-exist-paid-for-app-to-free- version-with-in-app-purchase) –

+0

Tal como está, este es un duplicado exacto de la primera pregunta. ¿Qué estás preguntando que es diferente? Las respuestas proporcionadas allí deben aplicarse en su caso. –

+1

Aprecio que la pregunta es la misma, pero las respuestas dadas fueron hace aproximadamente un año. El SDK se ha movido varias veces desde entonces. Eso y las sugerencias dadas realmente no responden al problema. – fringley

Respuesta

11

En primer lugar, sólo quiero decir que personalmente creo que el modelo freemium es grande. Ha funcionado muy bien para muchos desarrolladores. A la gente le encanta descargar aplicaciones gratuitas, y lo hará por capricho, pero prestan mucha más atención a una aplicación antes de gastar $ 0,99 (lo cual se debe al efecto de gratis; para más información, echa un vistazo al libro de Dan Ariely Predictably Irrational)

Para obtener más información sobre freemium, google it - Ha habido toneladas de artículos escritos sobre el éxito de la misma.


Ok, de vuelta a la pregunta real:

Hay un par de maneras que usted puede manejar un situtation como este, a pesar de la desafortunada cuestión aquí es que ninguno de ellos son a toda prueba.

  • La mejor solución probablemente sea que sus usuarios tengan cuentas. Sin conocer los detalles de su aplicación, no puedo decir si las cuentas de usuario son apropiadas para su aplicación. Las cuentas de usuario almacenadas en su servidor tienen muchos beneficios adicionales, incluida la administración de usuarios, y el seguimiento de las compras que ha realizado un usuario. Esto permitirá a los usuarios que eliminen la aplicación y luego la reinstalen u obtengan un nuevo dispositivo mantener su contenido comprado. Además, cada vez que utiliza la compra en la aplicación, debe validar la compra en su propio servidor (o con Apple), lo que puede hacer un sistema de manejo del usuario basado en el servidor. Si está totalmente en la cabeza con la creación de su propio servidor de administración de usuarios, consulte Parse. Es muy simple crear un servidor backend increíble (básicamente gratis)
  • clave de iCloud/tipo de valor del sistema. No estoy muy familiarizado con cómo esto funcionaría, así que seguiré adelante.
  • Otra, casi no tan infalible (pero mucho más rápida/más fácil de implementar) es usar NSUserDefaults. Puede almacenar un objeto cuando el usuario realiza una compra o con la fecha en que un usuario instala su aplicación. Luego, si publica una actualización, convierta su aplicación a freemium. Luego, en la nueva actualización, compruebe qué compras ha realizado el usuario o la fecha en que lo instaló, y reaccione en consecuencia. Para obtener información sobre cómo hacerlo con NSUserDefaults, consulte mi respuesta a otra pregunta sobre la implementación de eso: NSUserDefaults and app versions. Pero esta solución no presentar los siguientes peligros:

  • Si el usuario elimina su aplicación, la NSUserDefaults se ha perdido para siempre

  • Si el usuario no se ha instalado la creación del sistema de NSUserDefault actualización, pero luego instala el actualizar con el nuevo modelo freemium, la aplicación los trataría como si no hubieran comprado el contenido.

En verano, esta es una pregunta difícil, con pocas opciones fáciles/perfectas.

De todos modos,

Hope that helped!

+0

Parece una buena solución. Lo intentaré. Gracias –

+0

genial, echa un vistazo a mi edición – Andrew

+3

Esta solución no le protege del hecho de que un usuario que paga originalmente puede eliminar y luego volver a instalar la aplicación. En tal caso, los valores predeterminados del usuario se eliminarán y luego, después de volver a instalar la versión freemium, perderá las características adicionales. Entonces, esta solución, que funciona parcialmente, se puede mejorar guardando el UDID de los clientes actuales en un servidor, brindando así una protección adicional. Por supuesto, todavía no estás protegido de los usuarios que eliminan la aplicación y hacen un reinicio completo de su iPhone. Pero es un caso menor. – viggio24

2

Estoy tratando con lo mismo y se me ocurrió la siguiente idea: crear la versión de freemium con un nuevo nombre y una ID de aplicación. Guarde la aplicación de pago existente en la tienda de aplicaciones, pero suba el precio a algo absurdo y indique claramente en la descripción de que la aplicación está allí para mantener la compatibilidad con los usuarios existentes y que los nuevos usuarios deben probar la versión de freemium.

Los usuarios pagos existentes no perderán soporte para su aplicación existente y pueden eliminarla e instalarla en cualquier momento sin tener que volver a comprarla.

No tendrá que seguir actualizando la aplicación paga anterior, tampoco. Solo guárdalo en la tienda de aplicaciones.

La desventaja es que los usuarios pagos actuales no podrán migrar sin problemas a la versión freemium para obtener funciones adicionales que agregue en el futuro sin tener que volver a pagar por lo que ya tienen.

Todavía estoy tratando de decidir si esto funcionará para mí, pero podría ser una buena opción para los demás. Comentarios apreciados.

+0

¿Has probado esto? ¿Qué pensaban los usuarios? Tiene el mismo problema Tratando de descubrir cómo proceder. – Fraggle

+0

No lo intenté, lo siento. Terminé actualizando la aplicación de pago para establecer una bandera en las cuentas de iCloud de las personas que indican que tienen la aplicación de pago.Luego utilicé una bandera de actualización forzada que tenía en la aplicación que deshabilita la aplicación. Los clientes ya no podían usar la aplicación y se vieron obligados a actualizar a la nueva versión que establece la bandera. Causó un poco de confusión, pero me aseguré de que la redacción fuera fluida para que la gente supiera lo que estaba sucediendo. Eso es todo lo que he conseguido con eso. – Nicholas

2

He estado pensando en este problema desde hace un tiempo. Tengo una cantidad sustancial de clientes que pagaron mi aplicación de nicho de alto precio (en términos de App Store) y odiaría tener que decirles que vuelvan a comprar, ya que planeo migrar a un modelo de compra en la aplicación.

La idea que se me ocurrió (y le pediré a Apple soporte si es legal) es eliminar la aplicación pagada actual pero enviar una última actualización que permita "desbloquear" las compras en la aplicación de la nueva Aplicación basada en el modelo In-App. Estaba pensando en un esquema de respuesta de desafío:

  • usuario ha instalado la aplicación de pago en su dispositivo
  • usuario instala nueva In-App y lo abre. La nueva aplicación detecta la versión paga y ofrece desbloquear las compras en la aplicación (en este dispositivo solo por supuesto y siempre que no se elimine la aplicación)
  • La nueva aplicación genera una marca, la firma y llama a la antigua Aplicación con él a través de un esquema de URL
  • La aplicación antigua descifra el nonce, agrega +1 a él y lo vuelve a firmar. Devuelve la llamada a la nueva aplicación a través de esquema de URL
  • La nueva aplicación valida el valor de uso único y desbloquea las características

El esquema se puede implementar fácilmente utilizando una clave pre-compartida. Por supuesto, es una debilidad en los dispositivos rotos de la cárcel, pero luego todas las aplicaciones que almacenan recibos en la aplicación tienen esos problemas.

+0

Tenga en cuenta que esto puede estar en contra de la sección 11.1 de las directrices de revisión: https://developer.apple.com/appstore/resources/approval/guidelines.html#purchasing-currencies Me contacté con el equipo de App Review para ver qué recomiendan para actualizar la aplicación. –

+0

¡Por favor, comparte lo que respondieron! – AXE

+1

Me enviaron un enlace a un par de recursos con un comentario que decía 'Reconocemos que esto no aborda por completo su solicitud, pero esperamos que estos recursos le sean útiles'. Terminé no tratando de escabullirme este enfoque a través del proceso de Revisión de la aplicación. Resulta que no puedes hacer códigos de promoción para las compras en la aplicación, así que terminé manteniendo una versión "Pro" y "lite + IAP" ... –

20

Con iOS7, la aplicación iOS puede verificar el recibo de la tienda de aplicaciones, que contiene la fecha de descarga de la aplicación. Al usar esta fecha de descarga, puede determinar si un cliente se adquirió anteriormente o no

+4

Para ampliar esto, 'NSBundle' tiene una propiedad -' appStoreReceiptURL', que puede (pero no se garantiza) devolver un historial de recibos para la aplicación. Aunque no creo que contenga una fecha de descarga para la aplicación en sí (de acuerdo con la documentación de Receipt Fields, es un campo de recibos IAP, no el recibo de la aplicación), puede obtener el número de versión que se compró originalmente y usarlo para comprobar. No dude en corregirme, todavía no lo he probado. – Xono

+0

Esta podría ser la solución ideal si funciona. ¿Alguien sabe si Android tiene una propiedad similar? –

+0

@Xono - 'appStoreReceiptURL' devuelve el recibo asociado con la compra de su aplicación, no el historial de IAP ... https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/ NSBundle_Class/Reference/Reference.html # // apple_ref/occ/instm/NSBundle/appStoreReceiptURL –

13

Ahora existe una forma aprobada por Apple de hacer esto tanto en iOS como en macOS. La versión descargada originalmente de la aplicación se puede obtener del recibo usando la clave de información Original Purchased Version. A continuación, puede decidir si desea desbloquear funciones si esa versión es anterior al cambio a IAP.

Por ejemplo, una vez que haya recuperado la información de la recepción:

NSArray *versionsSoldWithoutIAP = @[@"1.0", @"1.1", @"1.2", @"1.3"]; 
NSString *originalPurchasedVersion = [receiptInfoDict objectForKey:@"Original Purchased Version"]; 
for (NSString *version in versionsSoldWithoutIAP) { 
    if ([version isEqualToString:originalPurchasedVersion]) { 
     // user paid for the currently installed version 
    } 
} 

Para más información ver el video WWDC 13 Using Receipts to Protect Your Digital Sales. A las 5:40, el presentador comenta: "Creo que lo más emocionante del recibo este año, especialmente para ustedes, si tienen una aplicación de pago en la tienda, es que hemos incluido información en el recibo que les permitirá haga una transición de ser una aplicación paga a ser una aplicación gratuita con compras en la aplicación sin dejar atrás a todos los clientes que ya han pagado por su aplicación ".

+0

Creo que el nombre de la clave es 'original_application_version' en lugar de' Original Purchased Version'. – iStar

Cuestiones relacionadas