Est-il possible de lancer une application iPhone quelconque à partir d'une autre application?, Par exemple dans mon application si je souhaite que l'utilisateur appuie sur un bouton et se lance directement dans l'application Téléphone (fermez l'application en cours, ouvrez le Application téléphonique).
cela serait-il possible? Je sais que cela peut être fait pour passer des appels téléphoniques avec le lien tel URL, mais je souhaite simplement que l'application Phone soit lancée sans composer de numéro spécifique.
Comme le souligne Kevin, les schémas d'URL sont le seul moyen de communiquer entre les applications. Donc, non, il n'est pas possible de lancer des applications arbitraires.
Mais il est possible de lancer n'importe quelle application qui enregistre un schéma d'URL, qu'il s'agisse de celui d'Apple, du vôtre ou d'un autre développeur. Les docs sont ici:
Communication avec d'autres applications
En ce qui concerne le lancement du téléphone, il semble que votre lien tel:
doit comporter au moins trois chiffres avant le lancement du téléphone. Donc, vous ne pouvez pas simplement entrer dans l'application sans composer un numéro.
J'ai trouvé qu'il est facile d'écrire une application pouvant en ouvrir une autre.
Supposons que nous ayons deux applications appelées FirstApp
et SecondApp
. Lorsque nous ouvrons la FirstApp, nous voulons pouvoir ouvrir la SecondApp en cliquant sur un bouton. La solution pour cela est:
Dans SecondApp
Allez dans le fichier plist de SecondApp et vous devrez ajouter un Schémas d'URL avec une chaîne iOSDevTips ((vous pouvez bien sûr écrire un autre string.it).
2 . dans FirstApp
Créez un bouton avec l'action ci-dessous:
- (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];
}
}
C'est tout. Maintenant, lorsque vous pouvez cliquer sur le bouton dans la FirstApp, il devrait ouvrir la SecondApp.
En rapide
Juste au cas où quelqu'un cherchait un rapide copier-coller 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)
}
Afin de vous permettre d'ouvrir votre application à partir d'une autre, vous devez apporter des modifications aux deux applications. Voici les étapes à suivre avec Swift 3 avec iOS 10 update:
1. Enregistrez votre application que vous souhaitez ouvrir
Mettez à jour le Info.plist
en définissant le modèle d'URL personnalisé et unique de votre application.
Notez que votre nom de schéma doit être unique, sinon, si vous avez une autre application avec le même nom de schéma d'URL installé sur votre appareil, le moment de son exécution sera déterminé.
2. Inclure le schéma d'URL précédent dans votre application principale
Vous devrez spécifier le schéma d'URL que vous souhaitez que l'application puisse utiliser avec la méthode canOpenURL:
de la classe UIApplication
. Ouvrez donc le Info.plist
de l'application principale et ajoutez le schéma d'URL de l'autre application à LSApplicationQueriesSchemes
. (Introduit dans iOS 9.0)_
3. Implémentez l'action qui ouvre votre application
Maintenant que tout est configuré, vous pouvez écrire votre code dans votre application principale qui ouvre votre autre application. Cela devrait ressembler à quelque chose comme ça:
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.
}
Notez que ces modifications nécessitent une nouvelle version si vous souhaitez que votre application existante (installée à partir d'AppStore) s'ouvre. Si vous souhaitez ouvrir une application que vous avez déjà publiée sur Apple AppStore, vous devez télécharger une la nouvelle version commence en premier avec l’enregistrement de votre schéma d’URL. _
Voici un bon tutoriel pour lancer une application depuis une autre application:
iOS SDK: Utilisation des schémas d'URL
Et, il n'est pas possible de lancer une application arbitraire, mais les applications natives qui ont enregistré les URL Schemes .
Vous pouvez uniquement lancer des applications ayant enregistré un schéma d'URL. Ensuite, comme si vous ouvriez l'application SMS à l'aide de sms :, vous pourrez ouvrir l'application à l'aide de leur schéma d'URL.
Il existe un très bon exemple disponible dans la documentation appelée LaunchMe qui illustre cela.
Exemple de code LaunchMe au 6 novembre 2017.
Pour ce faire, nous devons ajouter quelques lignes de code dans les deux applications.
App A: Ce que vous voulez ouvrir depuis une autre application. (La source)
App B: À partir de l'application B, vous souhaitez ouvrir App A(Destination)
Code pour App A
Ajoutez quelques balises dans la Plist de App A Ouvrez le Plist Source de l'App A et des versions antérieures à XML
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.TestApp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>testApp.linking</string>
</array>
</dict>
</array>
Dans le délégué d'application de App A - Obtenez le rappel ici
- (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
}
J'arrive maintenant à code de l'application B -
Si vous voulez juste ouvrir App A sans aucun paramètre d'entrée
-(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 vous voulez passer le paramètre de App B à App A, utilisez le code ci-dessous.
-(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];
}
}
Remarque: vous pouvez également ouvrir une application en tapant simplement testApp.linking: //? Sur le navigateur Safari.
Essayez le code suivant vous aidera à lancer une application à partir de votre application
Remarque: remplacez le nom fantacy par le nom réel de l'application.
NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
Non ce n'est pas. Outre les gestionnaires d'URL documentés, il n'y a aucun moyen de communiquer/lancer une autre application.
J'ai aussi essayé cela il y a quelque temps ( Lancer une application iPhone avec Identifier ), mais il n'y a aucun moyen DOCUMENTED de le faire. :)
Dans Swift 4.1 et Xcode 9.4.1
J'ai deux applications 1) PageViewControllerExample et 2) DelegateExample. Maintenant, je veux ouvrir l'application DelegateExample avec l'application PageViewControllerExample. Lorsque je clique sur le bouton Ouvrir dans PageViewControllerExample, l'application DelegateExample sera ouverte.
Pour cela, nous devons apporter quelques modifications aux fichiers .plist pour les deux applications.
Étape 1
Dans l'application DelegateExample, ouvrez le fichier .plist et ajoutez des types et des schémas d'URL. Ici, nous devons ajouter notre nom requis comme "myapp".
Étape 2
Dans l'application PageViewControllerExample, ouvrez le fichier .plist et ajoutez ce code
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myapp</string>
</array>
Nous pouvons maintenant ouvrir l'application DelegateExample en cliquant sur le bouton dans PageViewControllerExample.
//In PageViewControllerExample create IBAction
@IBAction func openapp(_ sender: UIButton) {
let customURL = URL(string: "myapp://")
if UIApplication.shared.canOpenURL(customURL!) {
//let systemVersion = UIDevice.current.systemVersion//Get OS version
//if Double(systemVersion)! >= 10.0 {//10 or above versions
//print(systemVersion)
//UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
//} else {
//UIApplication.shared.openURL(customURL!)
//}
//OR
if #available(iOS 10.0, *) {
UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(customURL!)
}
} else {
//Print alert here
}
}
Swift 3 version rapide et collée de @ villy393 answer for:
if UIApplication.shared.canOpenURL(openURL) {
UIApplication.shared.openURL(openURL)
} else if UIApplication.shared.canOpenURL(installUrl)
UIApplication.shared.openURL(installUrl)
}
Une note de côté concernant ce sujet ...
Il existe une limite de 50 requêtes pour les protocoles non enregistrés.
Dans cette discussion Apple mentionnez que, pour une version spécifique d'une application, vous ne pouvez interroger la canOpenUrl
qu'un nombre limité de fois et échouera après 50 appels pour des régimes non déclarés . J'ai également vu que si le protocole est ajouté une fois que vous avez entré cet état d'échec, il échouera quand même.
Soyez conscient de cela, pourrait être utile à quelqu'un.