it-swarm.com.de

App aus einem anderen starten (iPhone)

Ist es möglich, eine beliebige iPhone-Anwendung aus einer anderen App heraus zu starten ?, Zum Beispielin meiner Anwendung, wenn der Benutzer einen Knopf drücken und direkt in die Telefon-App starten möchte Öffnen Sie die Telefon-App).

wäre das möglich Ich weiß, dass dies für das Telefonieren mit dem Tel-URL-Link möglich ist. Ich möchte stattdessen lediglich die Phone-App starten, ohne eine bestimmte Nummer zu wählen. 

155
Jeff

Kevin weist darauf hin, dass URL-Schemata die einzige Möglichkeit sind, zwischen Apps zu kommunizieren. Nein, es ist nicht möglich, beliebige Apps zu starten. 

Es ist jedoch möglich, jede App zu starten, die ein URL-Schema registriert, unabhängig davon, ob es von Apple, von Ihnen oder von einem anderen Entwickler stammt. Die Dokumente sind hier:

Kommunizieren mit anderen Anwendungen

Beim Starten des Telefons müssen Ihre tel:-Links mindestens drei Ziffern enthalten, bevor das Telefon gestartet wird. Sie können also nicht einfach in die App einsteigen, ohne eine Nummer zu wählen.

76
Gordon Wilson

Ich habe festgestellt, dass es einfach ist, eine App zu schreiben, mit der eine andere App geöffnet werden kann. 

Nehmen wir an, wir haben zwei Apps namens FirstApp und SecondApp. Wenn wir die FirstApp öffnen, möchten wir die SecondApp durch Klicken auf eine Schaltfläche öffnen können. Die Lösung dafür ist: 

  1. In SecondApp

    Gehen Sie zur plist-Datei von SecondApp, und Sie müssen ein URL-Schema mit einem String iOSDevTips hinzufügen (natürlich können Sie einen weiteren String schreiben. Es liegt an Ihnen).

enter image description here

2 . In FirstApp

Erstellen Sie eine Schaltfläche mit der folgenden Aktion:

- (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];
  }

}

Das ist es. Wenn Sie jetzt auf die Schaltfläche in der FirstApp klicken können, sollte die SecondApp geöffnet werden.

70
lee

Die Lee-Antwort ist für iOS vor 8 absolut korrekt.

In iOS 9 müssen Sie alle URL-Schemata, die Ihre App in Info.plist unter dem Schlüssel LSApplicationQueriesSchemes (ein Array von Zeichenfolgen) abfragen möchte, in die Whitelist aufnehmen:

 enter image description here

22
KIO

In Swift

Nur wenn jemand nach einem schnellen und schnellen Copy & Paste suchte

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)      
}
15
villy393

Damit Sie Ihre Anwendung von einer anderen öffnen können, müssen Sie in beiden Anwendungen Änderungen vornehmen. Hier sind die Schritte, die Swift 3 mit iOS 10 verwenden:

1. Registrieren Sie Ihre Anwendung, die Sie öffnen möchten.

Aktualisieren Sie den Info.plist, indem Sie das benutzerdefinierte und eindeutige URL-Schema Ihrer Anwendung definieren.

 enter image description here

Beachten Sie, dass Ihr Schemaname eindeutig sein sollte. Andernfalls, wenn Sie eine andere Anwendung mit demselben URL-Schemanamen auf Ihrem Gerät installiert haben, wird dies zur Laufzeit bestimmt, welche geöffnet wird.

2. Fügen Sie das vorherige URL-Schema in Ihre Hauptanwendung ein.

Sie müssen das URL-Schema angeben, das die App mit der canOpenURL:-Methode der UIApplication-Klasse verwenden kann. Öffnen Sie also Info.plist der Hauptanwendung und fügen Sie das URL-Schema der anderen Anwendung zu LSApplicationQueriesSchemes hinzu. (Eingeführt in iOS 9.0)​​_

 enter image description here

3. Implementieren Sie die Aktion, die Ihre Anwendung öffnet.

Jetzt ist alles eingerichtet, also können Sie Ihren Code gut in Ihrer Hauptanwendung schreiben, die Ihre andere App öffnet. Das sollte ungefähr so ​​aussehen:

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.
}

Beachten Sie, dass diese Änderungen eine neue Version erfordern, wenn Sie Ihre vorhandene (von AppStore installierte) App öffnen möchten. Wenn Sie eine Anwendung öffnen möchten, die Sie bereits für Apple AppStore freigegeben haben, müssen Sie eine neue Version zuerst, die die Registrierung Ihres URL-Schemas beinhaltet.

11
choofie

Hier ist ein gutes Tutorial zum Starten der Anwendung aus einer anderen App heraus:
iOS SDK: Arbeiten mit URL-Schemata
Es ist nicht möglich, eine beliebige Anwendung zu starten, aber die nativen Anwendungen, die die URL-Schemata registriert haben. 

10
Nickolas

Sie können nur Anwendungen starten, die ein URL-Schema registriert haben. Dann wie Sie die App SMS mithilfe von sms: öffnen, können Sie die App mit ihrem URL-Schema öffnen.

In den Dokumenten mit dem Namen LaunchMe ist ein sehr gutes Beispiel verfügbar, das dies demonstriert.

LaunchMe-Beispielcode Stand vom 6. November 2017.

7
lostInTransit

Um dies zu erreichen, müssen wir in beiden Apps einige Codezeilen hinzufügen

App A: Was Sie von einer anderen App öffnen möchten. (Quelle)

App B: Von App B aus möchten Sie App A(Ziel) öffnen.

Code für App A

Fügen Sie einige Tags in die Plist von App A Öffnen Sie die Plist-Quelle für App A und Past unter XML

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.TestApp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testApp.linking</string>
        </array>
    </dict>
</array>

Im App-Delegierten von App A - Hier Callback abrufen

- (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 
}

Nun zu App B-Code

Wenn Sie App A nur ohne Eingabeparameter öffnen möchten 

-(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];

        }
}

Wenn Sie den Parameter von App B an App A übergeben möchten, verwenden Sie den folgenden Code

-(IBAction)openApp_A:(id)sender{
    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe&registered=1&Password=123abc"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

Hinweis: Sie können App auch öffnen, indem Sie einfach testApp.linking: //? Im Safari-Browser eingeben

7
Alok

Probieren Sie den folgenden Code aus, um eine Anwendung aus Ihrer Anwendung heraus zu starten 

Hinweis: Ersetzen Sie den Namen durch den tatsächlichen Anwendungsnamen 

NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
6
btmanikandan

Nein, ist es nicht. Neben den dokumentierten URL-Handlern gibt es keine Möglichkeit, mit einer anderen App zu kommunizieren bzw. diese zu starten.

3
Lily Ballard

Ich habe dies auch schon vor einiger Zeit versucht ( iPhone-Anwendung mit Identifier starten ), aber es gibt definitiv keinen DOKUMENTIERTEN Weg, dies zu tun. :)

2
Foebe

In Swift 4.1 und Xcode 9.4.1

Ich habe zwei Apps 1) PageViewControllerExample und 2) DelegateExample. Jetzt möchte ich die DelegateExample-App mit der PageViewControllerExample-App öffnen. Wenn ich in PageViewControllerExample auf die Schaltfläche "Öffnen" klicke, wird die DelegateExample-App geöffnet.

Dazu müssen wir einige Änderungen an den .plist-Dateien für beide Apps vornehmen.

Schritt 1

Öffnen Sie in der DelegateExample-App die .plist-Datei und fügen Sie URL-Typen und URL-Schemas hinzu. Hier müssen wir unseren erforderlichen Namen wie "myapp" hinzufügen.

 enter image description here

Schritt 2

Öffnen Sie in der PageViewControllerExample-App die .plist-Datei und fügen Sie diesen Code hinzu

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>myapp</string>
</array>

Jetzt können wir die DelegateExample-App öffnen, wenn wir in PageViewControllerExample auf die Schaltfläche klicken.

//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
    }
}
1
iOS

Swift 3 schnell und fügen Sie Version von @ villy393 Antwort für:

if UIApplication.shared.canOpenURL(openURL) {
    UIApplication.shared.openURL(openURL)
} else if UIApplication.shared.canOpenURL(installUrl) 
    UIApplication.shared.openURL(installUrl)
}
0
cdescours

Eine Randnotiz zu diesem Thema ...

Für nicht registrierte Protokolle gibt es ein Anforderungslimit von 50.

In dieser Diskussion Apple erwähnen, dass Sie für eine bestimmte Version einer App canOpenUrl nur eine begrenzte Anzahl von Malen abfragen können und wird nach 50 Aufrufen für nicht deklarierte Schemata fehlschlagen. Ich habe auch gesehen, dass, wenn das Protokoll hinzugefügt wird, sobald Sie diesen Fehlerstatus eingegeben haben, es immer noch fehlschlägt.

Seien Sie sich dessen bewusst, könnte für jemanden nützlich sein.

0
Duncan Hoggan