回答:
Kevinが指摘するように、URLスキームはアプリ間で通信する唯一の方法です。したがって、いいえ、任意のアプリを起動することはできません。
ただし、URLスキームを登録するアプリは、Appleのものでも、あなたのものでも、他の開発者のものでも起動できます。ドキュメントはここにあります:
電話の起動については、電話を起動するtel:
前にリンクに3桁以上が必要なようです。したがって、番号をダイヤルせずにアプリにドロップすることはできません。
別のアプリを開くことができるアプリを書くのは簡単だということがわかりました。
とという2つのアプリがあるとFirstApp
しSecondApp
ます。FirstAppを開くときに、ボタンをクリックしてSecondAppを開くことができるようにします。これを行うための解決策は次のとおりです。
SecondApp
SecondAppのplistファイルに移動し、文字列iOSDevTipsを含むURLスキームを追加する必要があります(もちろん、別の文字列を記述することもできます。
2。FirstApp
以下のアクションでボタンを作成します。
- (void)buttonPressed:(UIButton *)button
{
NSString *customURL = @"iOSDevTips://";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
}
それでおしまい。これで、FirstAppのボタンをクリックできると、SecondAppが開きます。
Info.plist
しFirstApp
ます。次に、アプリが開きたいスキームを追加します。この場合は次のItem 0
ようになりますiOSDevTips
LSApplicationQueriesSchemes
を開くことができるように、Info.plist に追加する必要があります。
leeの答えは、8より前のiOSでは完全に正しいです。
iOS 9以降では、LSApplicationQueriesSchemesキー(文字列の配列)の下のInfo.plistで、アプリがクエリするURLスキームをホワイトリストに登録する必要があります。
スウィフトで
念のために、誰かがSwiftの簡単なコピーと貼り付けを探していました。
if let url = NSURL(string: "app://") where UIApplication.sharedApplication().canOpenURL(url) {
UIApplication.sharedApplication().openURL(url)
} else if let itunesUrl = NSURL(string: "https://itunes.apple.com/itunes-link-to-app") where UIApplication.sharedApplication().canOpenURL(itunesUrl) {
UIApplication.sharedApplication().openURL(itunesUrl)
}
別のアプリケーションからアプリケーションを開くことができるようにするには、両方のアプリケーションで変更を加える必要があります。iOS 10でSwift 3を使用する手順は次のとおりですアップデートで。
1.開きたいアプリケーションを登録します
Info.plist
アプリケーションのカスタムで一意のURLスキームを定義して、を更新します。
スキーム名は一意である必要があります。それ以外の場合、同じURLスキーム名を持つ別のアプリケーションがデバイスにインストールされている場合、これは実行されるアプリケーションによって異なります。
2.メインアプリケーションに以前のURLスキームを含める
アプリcanOpenURL:
がUIApplication
クラスのメソッドで使用できるようにするURLスキームを指定する必要があります。したがって、メインアプリケーションを開き、Info.plist
他のアプリケーションのURLスキームをに追加しますLSApplicationQueriesSchemes
。(iOS 9.0で導入)
3.アプリケーションを開くアクションを実装する
これですべてがセットアップされたので、他のアプリを開くメインアプリケーションでコードを書くのは良いことです。これは次のようになります。
let appURLScheme = "MyAppToOpen://"
guard let appURL = URL(string: appURLScheme) else {
return
}
if UIApplication.shared.canOpenURL(appURL) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(appURL)
}
else {
UIApplication.shared.openURL(appURL)
}
}
else {
// Here you can handle the case when your other application cannot be opened for any reason.
}
既存のアプリ(AppStoreからインストール)を開く場合は、これらの変更に新しいリリースが必要であることに注意してください。Apple AppStoreにリリース済みのアプリケーションを開く場合は、URLスキーム登録を含む新しいバージョンを最初にアップロードする必要があります。
:ここでは他のアプリの中からアプリケーションを起動するための良いチュートリアルです
のiOS SDK:URLスキームを使用した作業
と、任意のアプリケーションを起動することはできませんが、登録されたネイティブアプリケーションURLスキームは。
これを実現するには、両方のアプリに数行のコードを追加する必要があります
アプリA:別のアプリから開きたいもの。(ソース)
アプリB:アプリBからアプリA (宛先)を開きます
アプリAのコード
アプリAのPlistにいくつかのタグを追加します。XMLの下に、アプリAの Plistソースと過去を開きます。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.TestApp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>testApp.linking</string>
</array>
</dict>
</array>
アプリAのアプリデリゲート内-ここでコールバックを取得
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// You we get the call back here when App B will try to Open
// sourceApplication will have the bundle ID of the App B
// [url query] will provide you the whole URL
// [url query] with the help of this you can also pass the value from App B and get that value here
}
今App Bコードに来ています -
入力パラメーターなしでアプリAを開きたいだけの場合
-(IBAction)openApp_A:(id)sender{
if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}
App BからApp Aにパラメーターを渡す場合は、以下のコードを使用します
-(IBAction)openApp_A:(id)sender{
if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe®istered=1&Password=123abc"]]){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}
注:testApp.linking://?と入力するだけでアプリを開くこともできます。サファリブラウザで
次のコードを試して、アプリケーションからアプリケーションを起動するのに役立ちます
注:名前fantacyを実際のアプリケーション名に置き換えます
NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
URLスキームを登録したアプリのみを起動できます。その後、sms:を使用してSMSアプリを開くように、URLスキームを使用してアプリを開くことができます。
これを実証するLaunchMeと呼ばれるドキュメントで利用できる非常に良い例があります。
2017年11月6日のLaunchMeサンプルコード。
私もしばらく前にこれを試しました(Identifierを使用してiPhoneアプリケーションを起動する)が、これを行うための文書化された方法はありません。:)
Swift 4.1およびXcode 9.4.1の場合
私は2つのアプリ1)PageViewControllerExampleと2)DelegateExampleを持っています。次に、PageViewControllerExampleアプリでDelegateExampleアプリを開きます。PageViewControllerExampleの[開く]ボタンをクリックすると、DelegateExampleアプリが開きます。
このため、両方のアプリの.plistファイルにいくつかの変更を加える必要があります。
ステップ1
DelegateExampleアプリで.plistファイルを開き、URLタイプとURLスキームを追加します。ここで、「myapp」のような必要な名前を追加する必要があります。
ステップ2
PageViewControllerExampleアプリで.plistファイルを開き、このコードを追加します
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myapp</string>
</array>
PageViewControllerExampleのボタンをクリックすると、DelegateExampleアプリを開くことができます。
//In PageViewControllerExample create IBAction
@IBAction func openapp(_ sender: UIButton) {
let customURL = URL(string: "myapp://")
if UIApplication.shared.canOpenURL(customURL!) {
//let systemVersion = UIDevice.current.systemVersion//Get OS version
//if Double(systemVersion)! >= 10.0 {//10 or above versions
//print(systemVersion)
//UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
//} else {
//UIApplication.shared.openURL(customURL!)
//}
//OR
if #available(iOS 10.0, *) {
UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(customURL!)
}
} else {
//Print alert here
}
}
このトピックに関する注意事項...
登録されていないプロトコルには、50のリクエスト制限があります。
このディスカッションで、アップルは、特定のバージョンのアプリではcanOpenUrl
、限られた回数しかクエリを実行できず、宣言されていないスキームを50回呼び出すと失敗することを述べましたます。また、この障害状態に入るとプロトコルが追加された場合でも、プロトコルは失敗することを確認しました。
これに注意してください、誰かに役立つかもしれません。