it-swarm.com.de

Bestimmen Sie, ob eine App vorhanden ist, und starten Sie diese App unter iOS

Gibt es eine Möglichkeit, iOS zu überprüfen, ob eine andere App installiert und dann gestartet wurde? Wenn der Speicher mir dient, war dies in früheren Versionen nicht möglich, aber wurde dies geändert?

74
Rob

Machbar, aber schwierig.

Das Starten installierter Apps wie der FB- oder Twitter-Apps erfolgt mithilfe des benutzerdefinierten URL-Schemas. Diese können sowohl in anderen Apps als auch auf Websites verwendet werden.

Hier ist ein Artikel darüber, wie Sie dies mit Ihrer eigenen App tun können .

Es kann jedoch schwierig sein, festzustellen, ob die URL vorhanden ist. Ein gutes Beispiel für eine App, die installierte Apps erkennt, ist Boxcar . Die Sache hier ist, dass Boxcar erweiterte Kenntnisse der benutzerdefinierten URLs hat. Ich bin ziemlich (zu 99%) sicher, dass es einen canOpenURL: Gibt. Wenn Sie also das benutzerdefinierte Schema der App kennen, auf die Sie sich im Voraus konzentrieren möchten, lässt sich dies einfach implementieren.

Hier ist eine unvollständige Liste von einigen der beliebtesten URLs, mit denen Sie vergleichen können.

Wenn Sie jedoch nach Apps suchen und deren URLs ableiten möchten, können Sie dies nicht auf einem Nicht-JB-Gerät tun.

Hier ist ein Blog-Beitrag darüber zu sprechen, wie die Leute von Bump mit dem Problem umgegangen sind.

65
Doug Stephen

Es gibt ein Skript wie das folgende.

<script type="text/javascript">
function startMyApp()
{
  document.location = 'yourAppScheme://';
  setTimeout( function()
  {
      if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
      {
        document.location = 'http://iTunes.Apple.com/us/app/yourAppId';
      }
  }, 300);
 }
</script>

Durch Aufrufen dieses Skripts aus dem Internet (<a href="#" onclick="startMyApp()">Try to start MyApp</a>) können Sie feststellen, ob Ihre App mit dem Schema "yourAppScheme" auf dem Gerät installiert ist oder nicht.

Die App wird gestartet, wenn sie auf dem Gerät installiert ist und "yourAppScheme" darin registriert ist. Wenn die App nicht installiert ist, können Sie dem Benutzer vorschlagen, diese App über iTunes zu installieren.

41
Ievgen

So überprüfen Sie, ob eine App installiert ist (z. B. Löschen):

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];

So öffnen Sie die App:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
22
Gavin Hope

Blendet die Fehlermeldung aus, wenn die App nicht installiert ist

Bei Branch verwenden wir eine Form des folgenden Codes - beachten Sie, dass der Iframe auf mehr Browsern funktioniert. Ersetzen Sie einfach in der URI Ihrer App und in Ihrem App Store-Link.

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript">
            window.onload = function() {
                // Deep link to your app goes here
                document.getElementById("l").src = "my_app://";

                setTimeout(function() {
                    // Link to the App Store should go here -- only fires if deep link fails                
                    window.location = "https://iTunes.Apple.com/us/app/my.app/id123456789?ls=1&mt=8";
                }, 500);
            };
        </script>
        <iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
    </body>
</html>

Es gibt eine zweite Möglichkeit, die sich zuerst auf Cookies stützt und die Javascript-Weiterleitung nur als Fallback. Hier ist die Logik:

Wenn ein Benutzer ohne App zum ersten Mal auf einen Link zu Ihrer App tippt, wird er direkt zum App Store weitergeleitet. Dies wird dadurch erreicht, dass ein Link zu Ihrer App tatsächlich eine dynamisch generierte Seite auf Ihren Servern mit der Umleitung ist. Sie erstellen ein Cookie und protokollieren einen "digitalen Fingerabdruck" von IP-Adresse, Betriebssystem, Betriebssystemversion usw. in Ihrem Backend.

Wenn der Benutzer die App installiert und öffnet, sammeln Sie einen weiteren "digitalen Fingerabdruck" und senden ihn an Ihr Backend. Jetzt weiß Ihr Backend, dass der Link installiert ist. Bei jedem weiteren Besuch von Links, die mit Ihrer App verknüpft sind, stellen Ihre Server sicher, dass die dynamisch generierte Weiterleitungsseite auf der Grundlage des mit der Anfrage gesendeten Cookies zur App und nicht zum App Store führt.

Dies vermeidet die hässliche Weiterleitung, erfordert aber eine Tonne mehr Arbeit.

12
st.derrick

Nach meinem Verständnis können Sie aus Datenschutzgründen nicht sehen, ob eine App auf dem Gerät installiert ist. Der Weg dahin ist, zu versuchen, die App zu starten. Wenn dies nicht der Fall ist, muss der Benutzer die Fallback-URL drücken. Um das Auftreten des Mobile Safari-Fehlers zu verhindern, wurde festgestellt, dass die Platzierung in einem Iframe zur Behebung des Problems beiträgt.

Hier ist ein Codeausschnitt, den ich verwendet habe.

<form name="mobileForm" action="mobile_landing.php" method="post">
        <input type="hidden" name="url" value="<?=$web_client_url?>">
        <input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
        <input type="hidden" name="device_os" value="<?=$device_os?>">
    </form>
<script type="text/javascript">
        var device_os = '<? echo $device_os; ?>'; 


        if (device_os == 'ios'){

        var now = new Date().valueOf(); 
        setTimeout(function () { 
            if (new Date().valueOf() - now > 100) 
                return;

        document.forms[0].submit(); }, 5); 


        var redirect = function (location) {
            var iframe = document.createElement('iframe');
            iframe.setAttribute('src', location);
            iframe.setAttribute('width', '1px');
            iframe.setAttribute('height', '1px');
            iframe.setAttribute('position', 'absolute');
            iframe.setAttribute('top', '0');
            iframe.setAttribute('left', '0');
            document.documentElement.appendChild(iframe);
            iframe.parentNode.removeChild(iframe);
            iframe = null;
        };

        setTimeout(function(){
            window.close()
            }, 150 );

        redirect("AppScheme");
2
Adrian Phan

Ich hatte kürzlich Probleme damit, und hier ist die Lösung, die ich gefunden habe. Beachten Sie, dass es immer noch keine sichere Möglichkeit gibt, festzustellen, ob die App gestartet wurde oder nicht.

Ich biete eine Seite von meinem Server an, die beim Erkennen des User-Agent auf eine iPhone-spezifische Variante umleitet. Links zu dieser Seite können nur per E-Mail/SMS oder Facebook geteilt werden.

Die Seite gibt eine minimale Version des Dokuments wieder, auf das verwiesen wird, versucht jedoch automatisch, die App zu öffnen, sobald sie geladen wird. Dabei wird ein versteckter <iframe> verwendet (AJAX schlägt in dieser Situation immer fehl - Sie können hierfür nicht jQuery oder XMLHttpRequest verwenden ).

Wenn das URL-Schema registriert ist, wird die App geöffnet und der Benutzer kann alles tun, was er benötigt. In beiden Fällen wird unten auf der Seite die folgende Meldung angezeigt: "Wurde die App gestartet? Wenn nicht, haben Sie sie wahrscheinlich noch nicht installiert ..." mit einem Link zum Store.

1
user2117956