iOS Guardar datos de compra en la aplicación y gestionar jailbreak

He creado aplicaciones que usan la compra en la aplicación y todo está bien. Ahora supongamos que el dispositivo está jailbroken y sin acceso a Internet (por lo que no puedo verificar el recibo de la tienda) y el usuario encuentra el file. He guardado la información de compra y la manipulo.

¿Cómo puedo lidiar con esta situación? ¿Hay una forma definida por la manzana? ¿O debo utilizar el encryption (junto con el process de obtención de la ERN)?

En la mayoría de los casos, los dispositivos jailbreak pueden ignorarse. Si alguien realmente quiere piratear su compra dentro de la aplicación en un dispositivo con jailbreak, él / ella podrá hacerlo.

Sí, puede hacer que sea más difícil, pero ¿vale la pena el esfuerzo? ¿No obtendría más beneficios (obteniendo más ventas) de agregar algunas características en su lugar y hacer que su aplicación sea más atractiva?

Además, Apple está trabajando duro para hacer que los iPhones sean difíciles de hacer jailbreak, y ahora, parece que serían bastante exitosos al hacerlo.

No, no hay una forma definida por Apple por lo que yo sé. Sí, podría usar el encryption con la identificación del dispositivo como key (o algo así en esas líneas). También puede usar el llavero iOS en lugar de un file para almacenar su información de compra.

Yo uso es mi propio "truco" para lidiar con este problema.

Primero escojo 2 numbers primos grandes diferentes (5-6 dígitos deberían hacerlo) y los multiplico y agrego 1. Uno de ellos es "master prime" y el otro depende del artículo comprado en la tienda.

(master_prime * prime) +1;

El número resultante es un número de 9 ~ 15 dígitos.

Lo guardo en 2 lugares diferentes en mi aplicación (como un NSKeyedArchiver en un file y en NSUserDefaults).

Esto es lo que sucede cuando el usuario compra algo de la tienda.

Cuando inicio la aplicación hago algunas comprobaciones:

  • si los 2 files tienen los mismos numbers
  • si el resultado de prime = (número de 9 dígitos / master_prime – 1) es primo
  • si el primo tiene una cierta propiedad (generalmente la sum de los dígitos es igual a un cierto número)

Si alguno de ellos no es cierto, entonces bash conectarse a Internet para restaurar la compra. Si no puedo … adiós a la compra (hasta que pueda conectarme a Internet otra vez … ofc).

Para optimizar esto … puedes comprobar la primera condición … si no es verdad, no es necesario verificar los demás.

Le di un número como este a uno de mis amigos para descifrarlo … y tardé ~ 5 horas en hacerlo con un número de 1 7 dígitos como número primo maestro y un número de 5 dígitos como número primo de la tienda. Y esto se debe a que él sabía lo que estaba haciendo … si no sabes cómo llegar a esos numbers, tomaría días o incluso meses.

Puedes mejorar esto con 3 numbers primos en lugar de 2. o numbers mayores … o cada número primo tiene una propiedad diferente.