別のアプリのスキームと自分のiOSアプリからのディープリンクを見つけるにはどうすればよいですか?
具体的には、特定の条件(コードで設定)でTestflightアプリにディープリンクしたいと思います。私はその人がTestflightをインストールしていると仮定しています(これは悪い仮定かもしれませんが、私たちはその仮定で生きることができます)。
Androidでは、アプリをクエリして、他の人のアプリへのディープリンクにインテントを送信できることを知っています。 iOSで同等のものは何でしょうか?
あなたがしなければならないことが2つあります。まず、TestFlightがインストールされているかどうかを確認します。次に、アプリへの新しいリンクを作成します。
NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {
// TestFlight is installed
// Special link that includes the app's Apple ID
customAppURL = [NSURL URLWithString:@"https://beta.iTunes.Apple.com/v1/app/978489855"];
[[UIApplication sharedApplication] openURL:customAppURL];
}
この特別なhttps://beta.iTunes.Apple.com
URLは、TestFlightで直接開かれます。
最後に、iOS 9(またはそれ以降)を使用している場合は、canOpenURL:
メソッドを機能させるために、Info.plistに追加する必要があります。
アプリがiOS9.0以降でリンクされている場合は、このメソッドに渡すURLスキームを宣言する必要があります。これを行うには、XcodeプロジェクトのInfo.plistファイルでLSApplicationQueriesSchemes配列を使用します。アプリでこのメソッドで使用するURLスキームごとに、この配列に文字列として追加します。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>itms-beta</string>
</array>
Plistを見ると、TestFlightのURLスキームは「itms-beta://」です。まだディープリンクを取得できません。Apple ID、 ?の有無にかかわらず、前にappleid =を付けて、次にバンドルIDを試します。
ユーザーデバイスでTestFlightアプリを開くには、次を使用できます。
NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {
[[UIApplication sharedApplication] openURL:customAppURL];
}
ほとんどの組み込みアプリケーションAppleは、カスタムURLスキームに応答します。たとえば、マップ、メール、YouTube、iTunes、およびApp StoreアプリケーションはすべてカスタムURLに応答して開きます。ただし、 、独自のアプリケーションで使用できる公開URLスキームを備えた確立されたサードパーティアプリケーションも多数あります。アプリケーションスキームはで検索できます。
http://wiki.akosma.com/IPhone_URL_Schemes –どちらにもURLスキームのすばらしいリストがあります
カスタムURLスキームを取得したら、同じスキーマを使用してそのアプリにディープリンクできます。
NSURL *customAppURL = [NSURL URLWithString:@"urlscheme://"];
//Eg: NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%20World!"];
if ([[UIApplication sharedApplication] canOpenURL:whatsAppURL]) {
[[UIApplication sharedApplication] openURL:whatsAppURL]]];
}
スウィフト3/4の答え:
if let customAppURL = URL(string: "itms-beta://"){
if(UIApplication.shared.canOpenURL(customAppURL)){
UIApplication.shared.open(customAppURL, options: [:], completionHandler: nil)
}
}
あるアプリまたは別のアプリを呼び出す別の方法:
- (IBAction)go:(id)sender {
NSString *cnnAppURL = @"cnn://";
NSString *mapsAppURL = @"maps://";
BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:cnnAppURL]];
NSString *url = canOpenURL ? cnnAppURL : mapsAppURL;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
「 seYourLoaf'sURLschemes
とcanOpenURL
の使用に関する最近のブログ投稿をお読みください。これは、新しいセキュリティ上の懸念と解決策に関連しています。引用:
「これは便利ですが、TwitterやFacebookなどの開発者は、このメカニズムを使用してデバイスにインストールされているアプリのリストを検出し、「カスタマイズされたコンテンツ」を配信できるようにしました。Appleこれはプライバシー違反であると判断し、そのため、iOS 9ではURLスキームのクエリが制限されていました。iOS9SDKに対してビルドしてリンクする場合は、アプリがクエリするスキームをホワイトリストに登録する必要があります。このポリシーは、まだ適用されていない古いアプリにも影響を与える可能性があることを理解しておくことが重要です。 iOS 9SDKで再構築されました。」
canOpenURL
関数に関連する問題については このリンク をお読みください
@piccianoの最後のポイントを読んでください-これは、アプリのplistを変更しないと機能しません。