カスタムスキーム(例:so://)を登録することでiOSのアプリに直接リンクできること、そしてiTunes経由でアプリストアのアプリにリンクすることもできます。
多くの場合、理想的なフローは、インストールされているアプリifにリダイレクトするリンクを提供することです。これは可能ですか?もし可能なら、どのように?
わかりやすくするために追加、シナリオは、アプリケーションのグループに参加するよう招待するiPhoneの電子メールからリンク(http)を開いています。ユーザーがそのデバイスにアプリをインストールしている場合は開く必要があります。そうでない場合は、httpリンクがiTunesにリダイレクトされます。
これを確認する方法はありません。ただし、ニースの回避策があります。
基本的にこれは次のとおりです。
最後の2つの手順について説明します このSO post
より簡単な答えは、次のJavaScriptを使用してサーバーにページを設定することだと思います。
(function() {
var app = {
launchApp: function() {
window.location.replace("myapp://");
this.timer = setTimeout(this.openWebApp, 1000);
},
openWebApp: function() {
window.location.replace("http://itunesstorelink/");
}
};
app.launchApp();
})();
これは基本的にアプリにリダイレクトを試み、失敗した場合にタイムアウトを設定してアプリストアにリダイレクトします。
コードをもう少しスマートにし、ユーザーエージェントをチェックして、iosユーザー、Androidユーザー、またはWebユーザーかどうかを確認し、適切にリダイレクトします。
iframe
にアプリのカスタムスキームが設定されたsrc
を含むWebページを含むメールからリンクするWebページがある場合、iOSは自動的にその場所にリダイレクトしますアプリアプリがインストールされていない場合、何も起こりません。これにより、アプリがインストールされている場合はアプリにディープリンクでき、インストールされていない場合はApp Storeにリダイレクトできます。
たとえば、Twitterアプリをインストールしていて、次のマークアップを含むWebページに移動すると、すぐにアプリに移動します。 Twitterアプリをインストールしていない場合、「The Twitter App is not installed」というテキストが表示されます。
<!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>
以下は、アプリがインストールされていない場合にアプリストアにリダイレクトするより完全な例です。
<!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>
「Smart App Banners」-いつ登場したかはわかりませんが、同じ投稿を探してこの投稿を見つけた後、Smart App Bannersをフォローアップします。
スマートアプリバナーは、ウェブエクスペリエンスでアプリを提供する各ページのヘッダーにある1行のHTMLメタタグです。
<meta name="Apple-iTunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
このアイコンはページの上部に表示され、アプリまたはApp Storeへのルーティングのいずれかで[このページを開く]が表示されます。
IPhone上のこのページのメタデータは次のようになります(もちろん匿名化されています)。
<meta name="Apple-iTunes-app" content="app-id=605841731, app-argument=lync://confjoin?url=https://meet.rtc.yourcorporatedomain.com/firstName.lastName/conferenceID">
とても簡単です。これを開くには、plistで宣言されたURLスキームを持つアプリを開く必要があります。
//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"]];
}
ここには多くの複雑なEdgeのケースがありますので、最も簡単な解決策は他の誰かにそのようなものを処理させることです。
これが https://branch.io/ の動作です。彼らの無料プランを使用して、ほんの一握りのボーナス機能を使用して、あなたが望むものを正確に達成することができます
Branch.ioとは提携していませんが、Branch.ioの製品を使用しています。
このアクションを達成するためのいくつかの簡単なステップがあります
ステップ1
移動->プロジェクト(ターゲットを選択)->情報-> URLタイプ
XcodeでURLスキームを作成する
ここでURLスキームはmyAppです(すべての文字を小文字にする方が良いです)。
ステップ2
URLからパラメーター/クエリ文字列を受信する予定がある場合は、デリゲートを設定します
コードは次のとおりです。
- (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;
}
Xcode側の作業の終了。
ステップ3
私はフロントエンドガイではないので、ここで@BananaNeilコードを参照する
(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();
})();
それがあなたのすべてを助けることを願っています