ios - nuevo - Lanzar una aplicación desde otro(iPhone)
lo nuevo de apple (12)
Aquí hay un buen tutorial para iniciar la aplicación desde otra aplicación:
SDK de iOS: trabajando con esquemas de URL
Y no es posible ejecutar aplicaciones arbitrarias, sino las aplicaciones nativas que registraron los Esquemas de URL .
¿Es posible ejecutar cualquier aplicación arbitraria de iPhone desde otra aplicación ?, por ejemplo, en mi aplicación si quiero que el usuario presione un botón y lance directamente a la aplicación Teléfono (cierre la aplicación actual, abra la aplicación Teléfono) .
sería esto posible? Sé que esto se puede hacer para hacer llamadas telefónicas con el enlace de tel URL, pero en vez de eso, solo quiero que la aplicación de teléfono se inicie sin marcar ningún número específico.
Como señala Kevin, los Esquemas de URL son la única forma de comunicarse entre aplicaciones. Entonces, no, no es posible ejecutar aplicaciones arbitrarias.
Sin embargo, es posible ejecutar cualquier aplicación que registre un Esquema de URL, ya sea de Apple, suyo o de otro desarrollador. Los documentos están aquí:
Comunicarse con otras aplicaciones
En cuanto al lanzamiento del teléfono, se parece a su tel:
enlace debe tener al menos tres dígitos antes de que se inicie el teléfono. Entonces no puedes simplemente ingresar a la aplicación sin marcar un número.
Descubrí que es fácil escribir una aplicación que puede abrir otra aplicación.
Supongamos que tenemos dos aplicaciones llamadas FirstApp
y SecondApp
. Cuando abrimos FirstApp, queremos poder abrir SecondApp haciendo clic en un botón. La solución para hacer esto es:
En SecondApp
Vaya al archivo plist de SecondApp y necesita agregar un URL Schemes con una cadena iOSDevTips (por supuesto, puede escribir otro string.it depende de usted).
2. En FirstApp
Crea un botón con la siguiente acción:
- (void)buttonPressed:(UIButton *)button
{
NSString *customURL = @"iOSDevTips://";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
}
Eso es. Ahora, cuando puede hacer clic en el botón en FirstApp, debería abrir SecondApp.
No, no es. Además de los manejadores de URL documentados, no hay forma de comunicarse con / ejecutar otra aplicación.
Para lograr esto, necesitamos agregar pocas líneas de código en ambas aplicaciones
Aplicación A: que desea abrir desde otra aplicación.
Aplicación B : desde la aplicación B, quiere abrir la aplicación A
Código para la aplicación A
Agregue algunas etiquetas en la lista de aplicaciones de la lista A de Open Plist de App A y XML anterior a XML.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.TestApp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>testApp.linking</string>
</array>
</dict>
</array>
En delegado de la aplicación de la aplicación A - Obtenga una devolución de llamada aquí
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// You we get the call back here when App B will try to Open
// sourceApplication will have the bundle ID of the App B
// [url query] will provide you the whole URL
// [url query] with the help of this you can also pass the value from App B and get that value here
}
Ahora viene al código de la aplicación B -
Si solo quieres abrir la Aplicación A sin ningún parámetro de entrada
-(IBAction)openApp_A:(id)sender{
if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}
Si desea pasar el parámetro de la aplicación B a la aplicación A , utilice el siguiente código
-(IBAction)openApp_A:(id)sender{
if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe®istered=1&Password=123abc"]]){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}
Nota: También puede abrir la aplicación con solo escribir testApp.linking: //? en el navegador Safari
Para poder abrir su aplicación desde otra, deberá realizar cambios en ambas aplicaciones. Estos son los pasos usando Swift 3 con la actualización de iOS 10 :
1. Registre su aplicación que quiere abrir
Actualice Info.plist
definiendo el esquema de URL único y personalizado de su aplicación.
Tenga en cuenta que el nombre de su esquema debe ser único; de lo contrario, si tiene otra aplicación con el mismo nombre de esquema de URL instalado en su dispositivo, entonces se determinará el tiempo de ejecución que se abrirá.
2. Incluye el esquema de URL anterior en tu aplicación principal
Deberá especificar el esquema de URL que desea que la aplicación pueda usar con el método canOpenURL:
de la clase UIApplication
. Así que abra el Info.plist
la aplicación principal y agregue el esquema de URL de la otra aplicación a LSApplicationQueriesSchemes
. (Introducido en iOS 9.0)
3. Implementa la acción que abre tu aplicación
Ahora todo está configurado, por lo que es bueno escribir el código en la aplicación principal que abre la otra aplicación. Esto debería verse algo como esto:
let appURLScheme = "MyAppToOpen://"
guard let appURL = URL(string: appURLScheme) else {
return
}
if UIApplication.shared.canOpenURL(appURL) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(appURL)
}
else {
UIApplication.shared.openURL(appURL)
}
}
else {
// Here you can handle the case when your other application cannot be opened for any reason.
}
Tenga en cuenta que estos cambios requieren una nueva versión si desea que su aplicación existente (instalada desde AppStore) se abra. Si desea abrir una aplicación que ya ha lanzado a Apple AppStore, primero deberá cargar una nueva versión que incluya su registro de esquema de URL.
Pruebe con el siguiente código que lo ayudará a iniciar una aplicación desde su aplicación
Nota: Reemplace la fantasía del nombre con el nombre de la aplicación real
NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
Solo puede iniciar aplicaciones que hayan registrado un esquema de URL. Entonces, al igual que abres la aplicación de SMS usando sms :, podrás abrir la aplicación usando su esquema de URL.
Hay un muy buen ejemplo disponible en los documentos llamados LaunchMe que demuestra esto.
LaunchMe código de muestra a partir del 6 de noviembre de 2017.
Swift 3 versión rápida y pegada de @ villy393 respuesta para:
if UIApplication.shared.canOpenURL(openURL) {
UIApplication.shared.openURL(openURL)
} else if UIApplication.shared.canOpenURL(installUrl)
UIApplication.shared.openURL(installUrl)
}
También probé esto hace un tiempo ( Lanzamiento de aplicación de iPhone con identificador ), pero definitivamente no hay una forma DOCUMENTADA de hacerlo. :)
En Swift
Solo en caso de que alguien estuviera buscando una copia y pegue rápido de Swift
if let url = NSURL(string: "app://") where UIApplication.sharedApplication().canOpenURL(url) {
UIApplication.sharedApplication().openURL(url)
} else if let itunesUrl = NSURL(string: "https://itunes.apple.com/itunes-link-to-app") where UIApplication.sharedApplication().canOpenURL(itunesUrl) {
UIApplication.sharedApplication().openURL(itunesUrl)
}