una tuapp para multiplataforma moviles hacer gratis empresariales elaboración diseño desarrollo crear como apps aplicaciones aplicacion ios sdk udid

ios - tuapp - elaboración de apps empresariales para iphone y android



iOS: detecta si mi SDK está instalado en otras aplicaciones en el dispositivo (5)

Creo que es posible usar keychain , puedes tener una llave de llave única en la que puedes guardar lo que quieras, y otras aplicaciones pueden acceder a ella, si está disponible. Por lo tanto, para su SDK , digamos que si hay una aplicación, registrará algún valor en el llavero con una clave única que sea privada para su SDK solo si la clave no existe, y si existe, usted sabrá, ya que usted puede guardar cualquier valor en el llavero, puede probar múltiples opciones y combinaciones que le convengan.

Puede usar KeychainItemWrapper para las implementaciones.

Elaboración

Digamos que tenemos un método.

[MySDK register];

Que se puede usar en cualquier lugar, digamos en AppDelegate . El método de register generará un token para la aplicación, para el dispositivo, que com.mysdk.key en el llavero utilizando una clave única que hemos definido en el SDK, por ejemplo en com.mysdk.key . Y al guardar en keychain el SDK puede hacer un registro.

Consideramos que el método anterior se implementa en múltiples aplicaciones.

Ahora tenemos un escenario.

  1. El usuario instala un App-A que usa el SDK , el método de register llamará y creará un token y se guardará en el llavero por primera vez.

  2. Ahora el usuario instala otra App-B que también usa el SDK , el mismo método de register llamará, pero ahora buscará la clave com.mysdk.key en keychain, si existe solo actualizará el conteo para el token, lo que significa para el dispositivo.

Nota

Llavero no destinado a guardar solo unique identifier , puede guardar otras informaciones también.

Actualizar

Ver proyectos de demostración https://db.tt/7xpKrgMp

El wrapper que he usado en los proyectos es el mismo que SDK en su caso, que es el mismo en ambos proyectos.

Aclamaciones.

Estoy desarrollando un Q & A SDK basado en ubicación para dispositivos móviles.

Cuando se hace una pregunta sobre una ubicación específica, el lado del servidor se dirige al usuario más relevante y envía la pregunta a ese usuario. Si el usuario no responde, la pregunta se envía al segundo mejor usuario, y así sucesivamente.

El problema es que mi SDK puede estar instalado en más de una aplicación en el dispositivo, lo que significa que el usuario puede obtener una pregunta más de una vez.

¿Hay alguna forma de detectar si mi SDK está instalado en más de una aplicación? Pensé que enviar el UDID al servidor podría funcionar, pero los UDID de iOS difieren entre las aplicaciones .


Creo que puedes agrupar las aplicaciones en el mismo dispositivo por dirección IP ya que usarán la misma dirección para conectarte a tu servidor. Entonces, la dirección IP representará el dispositivo y la clave API representará la aplicación que usa el SDK.


Puede usar UIPasteboard para compartir datos entre aplicaciones en el dispositivo.

La clase UIPasteboard permite que una aplicación comparta datos dentro de la aplicación y con otra aplicación. Para compartir datos con cualquier otra aplicación, puede usar las tablas de todo el sistema; para compartir datos con otra aplicación que tenga el mismo ID de equipo que tu aplicación, puedes usar las carpetas específicas de la aplicación.

En tu SDK, haz algo como esto:

@interface SDKDetector : NSObject @end @implementation SDKDetector + (void)load { int numberOfApps = (int)[self numberOfAppsInDeviceUsingSDK]; NSLog(@"Number of apps using sdk:%d", numberOfApps); } + (NSInteger)numberOfAppsInDeviceUsingSDK { static NSString *pasteboardType = @"mySDKPasteboardUniqueKey"; NSData *value = [[UIPasteboard generalPasteboard] valueForPasteboardType:pasteboardType]; NSMutableArray *storedData = [[NSKeyedUnarchiver unarchiveObjectWithData:value] mutableCopy]; if (!storedData) { storedData = [NSMutableArray new]; } NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier]; if (![storedData containsObject:bundleId]) { [storedData addObject:[[NSBundle mainBundle] bundleIdentifier]]; } value = [NSKeyedArchiver archivedDataWithRootObject:storedData]; [[UIPasteboard generalPasteboard] setData:value forPasteboardType:pasteboardType]; return [storedData count]; } @end


Puedes intentar usar

publicIdentifier

No estoy seguro de si le sirve a su propósito. Aquí se explica la referencia de clase ASIdentifierManager: Apple doc


Si solo desea proporcionar un SDK, no es posible. Apple ha agregado medidas de seguridad para evitar eso para la privacidad del usuario. El intercambio de llavero no funcionará, porque las aplicaciones deben compartir el mismo ID de semilla del paquete (ver aquí para más información).

Si desea proporcionar una aplicación junto con su SDK, puede hacer algo como Facebook, donde la aplicación envía un mensaje "helo", Facebook pregunta al usuario y finalmente Facebook envía el mensaje "ehlo".

Tu aplicación -> "Me gustaría usar el SDK; dame un token" -> SDK Controller App -> (Recuerda qué aplicaciones has solicitado usar) -> "OK, puedes usar el SDK; aquí hay un token: # 123 "-> Tu aplicación

La aplicación de controlador SDK ahora puede enviar al servidor la lista de aplicaciones.