webentwicklung-frage-antwort-db.com.de

Falls vorhanden, zur Anwendung umleiten, andernfalls zum App Store

Ich weiß, dass es möglich ist, unter iOS eine direkte Verknüpfung zu einer App herzustellen, indem ein benutzerdefiniertes Schema registriert wird (z. B. //), und es ist auch möglich, die App im Appstore über iTunes zu verbinden.

In vielen Fällen besteht der ideale Ablauf darin, einen Link bereitzustellen, der zur App if führt, die installiert wird, und zum Store, falls dies nicht der Fall ist. Ist das möglich und wenn ja, wie?

Zum besseren Verständnis hinzugefügt , das Szenario ist, dass ich einen Link (http) von einer E-Mail auf meinem iPhone öffne, der mich einlädt, einer Gruppe in einer Anwendung beizutreten. Wenn der Benutzer die App auf diesem Gerät installiert hat, sollte er geöffnet werden, andernfalls sollte der http-Link zu iTunes weitergeleitet werden.

55
ConfusedNoob

Es gibt keine Möglichkeit, dies zu überprüfen. Allerdings gibt es eine Problemumgehung von Nice.

Die Idee ist im Grunde Folgendes:

  1. Wenn Sie Ihre App zum ersten Mal öffnen, öffnen Sie die mobile Safari von Ihrer App aus mit einer vordefinierten URL auf Ihrem Server
  2. Auf dieser URL legen Sie ein Cookie fest, das beispielsweise auf der mobilen Safari des Benutzers installiert ist
  3. Sie kicken den Benutzer dann mit Ihrem registrierten Schema zurück zu Ihrer App (genau wie FB mit SSO).
  4. Alle Ihre E-Mail-Links verweisen auf Ihre Website. Sie überprüfen jedoch auf der Website, ob es sich bei Ihrem Browser um mobile Safari handelt und ob das installierte Cookie vorhanden ist
  5. Wenn der Browser nicht mobil ist oder der Cookie nicht gefunden wird, leiten Sie zum AppStore weiter oder bleiben auf Ihrer Webseite.
  6. Wenn die Bedingungen von # 4 zutreffen, leiten Sie den Benutzer mit dem registrierten Schema zu Ihrer App um
  7. Wenn die App vom Benutzer gelöscht wurde und das benutzerdefinierte URL-Schema fehlschlägt, haben Sie eine fehlersichere Weiterleitung an den Appstore

Die beiden letzten Schritte werden erklärt auf diesem SO post

26
Lefteris

Ich denke, die einfachere Antwort wäre, eine Seite mit folgendem Javascript auf Ihrem Server einzurichten:

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myapp://");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

Hierbei wird grundsätzlich versucht, zu Ihrer App umzuleiten, und es wird ein Timeout für die Umleitung zum App Store festgelegt, falls dies fehlschlägt.

Sie können den Code sogar etwas intelligenter machen und den Benutzeragenten prüfen, ob es sich um einen ios-Benutzer, einen Android-Benutzer oder einen Webbenutzer handelt, und diese dann entsprechend umleiten. 

49
BananaNeil

Wenn Sie über eine Webseite verfügen, zu der Sie von der E-Mail aus eine Verknüpfung herstellen, die eine iframe enthält, deren src auf das benutzerdefinierte Schema Ihrer App eingestellt ist, wird iOS automatisch an diesen Ort in der App umgeleitet. Wenn die App nicht installiert ist, passiert nichts. Auf diese Weise können Sie bei Bedarf auf die App zugreifen, wenn sie installiert ist, oder zum App Store umleiten, wenn sie nicht installiert ist.

Wenn Sie beispielsweise die Twitter-App installiert haben und zu einer Webseite mit der folgenden Markierung navigieren, werden Sie sofort zur App geleitet. Wenn Sie die Twitter-App nicht installiert haben, wird der Text "Die Twitter-App ist nicht installiert" angezeigt.

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="Twitter://" width="0" height="0"></iframe>
        <p>The Twitter App is not installed</p>
    </body>
</html>

Hier ist ein ausführlicheres Beispiel, das zum App Store weiterleitet, wenn die App nicht installiert ist:

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    <script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
    <script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
    <script>
      (function ($, MobileEsp) {
        // On document ready, redirect to the App on the App store.
        $(function () {
          if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
            // Add an iframe to Twitter://, and then an iframe for the app store
            // link. If the first fails to redirect to the Twitter app, the
            // second will redirect to the app on the App Store. We use jQuery
            // to add this after the document is fully loaded, so if the user
            // comes back to the browser, they see the content they expect.
            $('body').append('<iframe class="Twitter-detect" src="Twitter://" />')
              .append('<iframe class="Twitter-detect" src="itms-apps://iTunes.com/apps/Twitter" />');
          }
        });
      })(jQuery, MobileEsp);
    </script>
    <style type="text/css">
      .Twitter-detect {
        display: none;
      }
    </style>
    </head>
    <body>
    <p>Website content.</p>
    </body>
</html>
14
q0rban

Ja, es ist ziemlich einfach. Für die zu öffnende App muss in der plist ein URL-Schema definiert sein:

//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}
8
rooster117

"Smart App Banners" - nicht sicher, wann sie aufgetaucht sind, aber nachdem Sie diesen Beitrag gefunden haben, suchen Sie nach den gleichen, dann nach Smart App Banners.

Smart App-Banner sind ein einzeiliges HTML-Meta-Tag im Header jeder Seite, die Sie Ihrer App über das Web-Erlebnis anbieten möchten:

<meta name="Apple-iTunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

dies zeigt das Symbol oben auf der Seite und "Diese Seite öffnen in" entweder mit der App oder über das Routing an den App Store. 

 enter image description here

Die Metadaten für diese Seite auf dem iPhone sehen folgendermaßen aus (natürlich anonymisiert):

<meta name="Apple-iTunes-app" content="app-id=605841731, app-argument=lync://confjoin?url=https://meet.rtc.yourcorporatedomain.com/firstName.lastName/conferenceID">

Apple Entwicklerdokumentation - Werbung für Apps mit intelligenten App-Bannern

7
William Cerniuk

Es gibt einige einfache Schritte, um diese Aktion zu erreichen

Schritt 1

Gehe zu -> Projekt (Ziel auswählen) -> Info -> URL-Typen

 enter image description here

Erstellen Sie ein URL-Schema in XcodeGleich

 enter image description here Hier URL Scheme ist myApp (es ist besser alle Buchstaben in Kleinbuchstaben zu haben).

Schritt 2

Richten Sie Delegate ein, wenn Sie Parameter/Abfragezeichenfolgen von der URL erhalten möchten

Hier ist der Code:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

     NSLog(@"APP : simple action %@",url.scheme);

    if ([url.scheme hasPrefix:@"myapp"]) {

        NSLog(@"APP inside simple %@",url.absoluteString);


        NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                    resolvingAgainstBaseURL:NO];
        NSArray *queryItems = urlComponents.queryItems;
        NSString * abc = [self valueForKey:@"abc"
                           fromQueryItems:queryItems];
        NSString * xyz = [self valueForKey:@"xyz"
                           fromQueryItems:queryItems];


        NSLog(@"Sid up = %@", abc);

        NSLog(@"PID up = %@", xyz);

      // you can do anything you want to do here



        return YES;
    }
return NO;
}

Ende der Xcode-Seite.

Schritt 3

Ich beziehe mich hier auf @BananaNeil Code, da ich kein Front-End-Typ bin

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myApp://share?abc=12&xyz=123");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

Ich hoffe es wird euch allen helfen

1

Es gibt hier eine Reihe komplizierter Edge-Fälle. Die einfachste Lösung besteht darin, dass jemand anderes damit umgehen kann.

Dies ist, was https://branch.io/ do . Sie können ihren kostenlosen Plan verwenden, um genau das zu erreichen, was Sie möchten, mit einer Handvoll Bonusfunktionen

  • statistiken
  • sie können zusammen mit dem Link Informationen weitergeben, die auch dann abgerufen werden, wenn der Benutzer zuerst eine Installation durchführen musste
  • link funktioniert auf dem Desktop (standardmäßig wird ein Link zur Installation an Ihr Handy gesendet)

Ich bin nicht mit Branch.io verbunden, aber ich benutze ihr Produkt.

0
Confused Vorlon