別のアプリ内から任意の iPhone アプリケーションを起動することは可能ですか?たとえば 、私のアプリケーションでは、ユーザーにボタンを押して直接電話アプリを起動させたい場合 (現在のアプリを閉じて、電話アプリを開く) .
これは可能でしょうか?tel URL リンクを使用して電話をかけるためにこれを実行できることはわかっていますが、代わりに、特定の番号をダイヤルせずに電話アプリを起動したいと考えています。
別のアプリ内から任意の iPhone アプリケーションを起動することは可能ですか?たとえば 、私のアプリケーションでは、ユーザーにボタンを押して直接電話アプリを起動させたい場合 (現在のアプリを閉じて、電話アプリを開く) .
これは可能でしょうか?tel URL リンクを使用して電話をかけるためにこれを実行できることはわかっていますが、代わりに、特定の番号をダイヤルせずに電話アプリを起動したいと考えています。
Kevin が指摘するように、URL スキームはアプリ間で通信する唯一の方法です。いいえ、任意のアプリを起動することはできません。
ただし、URL スキームを登録する任意のアプリを起動することは可能です。それが Apple のものであろうと、あなたのものであろうと、別の開発者のものであろうと。ドキュメントは次のとおりです。
電話の起動に関してはtel:
、電話が起動する前に、リンクに少なくとも 3 桁の数字が必要なようです。そのため、番号をダイヤルせずにアプリにドロップすることはできません。
別のアプリを開くことができるアプリを作成するのは簡単であることがわかりました。
と という 2 つのアプリがあるとFirstApp
しSecondApp
ます。FirstApp を開いたときに、ボタンをクリックして 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 が開きます。
スイフトで
誰かが簡単な Swift のコピー アンド ペーストを探していた場合に備えて。
if let url = URL(string: "app://"), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else if let itunesUrl = URL(string: appLink), UIApplication.shared.canOpenURL(itunesUrl) {
UIApplication.shared.open(itunesUrl, options: [:], completionHandler: nil)
}
別のアプリケーションからアプリケーションを開くことができるようにするには、両方のアプリケーションで変更を加える必要があります。iOS 10アップデートでSwift 3を使用する手順は次のとおりです。
1. 開きたいアプリケーションを登録します
Info.plist
アプリケーションのカスタムで一意の URL スキームを定義して、 を更新します。
スキーム名は一意である必要があることに注意してください。そうしないと、デバイスに同じ URL スキーム名を持つ別のアプリケーションがインストールされている場合、実行時にどのアプリケーションが開かれるかが決定されます。
2. メイン アプリケーションに以前の URL スキームを含める
アプリがクラスのcanOpenURL:
メソッドで使用できるようにする URL スキームを指定する必要があります。UIApplication
そのため、メイン アプリケーションを開き、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 スキーム
を登録したネイティブ アプリケーションを起動します。
次のコードを試すと、アプリケーションからアプリケーションを起動するのに役立ちます
注: 名前の空想を実際のアプリケーション名に置き換えます
NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
URL スキームを登録したアプリのみを起動できます。次に、sms: を使用して SMS アプリを開くのと同じように、URL スキームを使用してアプリを開くことができます。
これを示す LaunchMe というドキュメントに非常に良い例があります。
私も少し前にこれを試しました(Launch iPhone Application with Identifier)が、これを行うための文書化された方法は絶対にありません。:)