Gibt es eine Möglichkeit, iOS zu überprüfen, ob eine andere App installiert und dann gestartet wurde? Wenn mir das Gedächtnis dient, war dies in früheren Versionen nicht möglich, aber wurde dies geändert?
Gibt es eine Möglichkeit, iOS zu überprüfen, ob eine andere App installiert und dann gestartet wurde? Wenn mir das Gedächtnis dient, war dies in früheren Versionen nicht möglich, aber wurde dies geändert?
Antworten:
Machbar, aber knifflig.
Das Starten installierter Apps wie der FB- oder Twitter-Apps erfolgt über das benutzerdefinierte URL-Schema. 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 fortgeschrittene Kenntnisse der benutzerdefinierten URLs hat. Ich bin mir ziemlich sicher (99%), dass es eine canOpenURL:
gibt. Wenn Sie also das benutzerdefinierte Schema der App kennen, auf die Sie im Voraus abzielen möchten, ist dies einfach zu implementieren.
Hier ist eine unvollständige Liste einiger der beliebtesten URLs, anhand derer Sie überprüfen können.
Es gibt eine Möglichkeit, die URL der benutzerdefinierten App herauszufinden: https://www.amerhukic.com/finding-the-custom-url-scheme-of-an-ios-app
Wenn Sie jedoch nach Apps suchen und deren URLs ableiten möchten, ist dies auf einem Nicht-JB-Gerät nicht möglich.
Hier ist ein Blog-Beitrag darüber, wie die Leute bei Bump mit dem Problem umgegangen sind.
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>
<a href="#" onclick="startMyApp()">Try to start MyApp</a>
Wenn Sie dieses Skript über das Web ( ) aufrufen, 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.
document.location
) sollte JS die Ausführung beenden, daher sollte die Funktion in setTimeout
niemals ausgeführt werden. Nicht, dass ich einen besseren Weg kenne (es sei denn, iOS Smart App Banner reichen für Ihre Bedürfnisse aus). Würde gerne als falsch erwiesen werden.
So überprüfen Sie, ob eine App installiert ist (z. B. Löschen):
BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
So öffnen Sie diese App:
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
Blendet die Fehlermeldung aus, wenn die App nicht installiert ist
Bei Branch verwenden wir eine Form des folgenden Codes - beachten Sie, dass der Iframe in mehr Browsern funktioniert. Ersetzen Sie einfach den URI Ihrer App und Ihren 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 erreicht, indem 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 allen nachfolgenden Besuchen von Links, die Ihrer App zugeordnet sind, stellen Ihre Server sicher, dass die dynamisch generierte Weiterleitungsseite auf der Grundlage des mit der Anforderung gesendeten Cookies zur App und nicht zum App Store führt.
Dies vermeidet die hässliche Weiterleitung, erfordert jedoch eine Tonne mehr Arbeit.
appname
oder die appID
?
Nach meinem Verständnis können Sie aus Datenschutzgründen nicht sehen, ob eine App auf dem Gerät installiert ist. Um dies zu umgehen, müssen Sie versuchen, die App zu starten. Wenn sie nicht gestartet wird, muss der Benutzer die Fallback-URL drücken. Um zu verhindern, dass der Fehler bei der mobilen Safari auftritt, habe ich festgestellt, dass das Platzieren 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");
Ich hatte kürzlich Probleme damit, und hier ist die Lösung, die ich gefunden habe. Beachten Sie, dass es immer noch keine todsichere Möglichkeit gibt, festzustellen, ob die App gestartet wurde oder nicht.
Ich stelle eine Seite von meinem Server bereit, die beim Erkennen des User-Agent zu einer iPhone-spezifischen Variante umleitet. Links zu dieser Seite können nur per E-Mail / SMS oder Facebook geteilt werden.
Die Seite rendert eine minimale Version des Dokuments, auf das verwiesen wird, versucht dann jedoch automatisch, die App zu öffnen, sobald sie geladen wird, und verwendet dabei einen versteckten <iframe> (AJAX schlägt in dieser Situation immer fehl - Sie können dafür weder jQuery noch 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 auf der Seite unten die folgende Meldung angezeigt: "Wurde die App gestartet? Wenn nicht, haben Sie sie wahrscheinlich noch nicht installiert ..." mit einem Link zum Store.