177

別のアプリ内から任意の iPhone アプリケーションを起動することは可能ですか?たとえば 、私のアプリケーションでは、ユーザーにボタンを押して直接電話アプリを起動させたい場合 (現在のアプリを閉じて、電話アプリを開く) .

これは可能でしょうか?tel URL リンクを使用して電話をかけるためにこれを実行できることはわかっていますが、代わりに、特定の番号をダイヤルせずに電話アプリを起動したいと考えています。

4

14 に答える 14

82

Kevin が指摘するように、URL スキームはアプリ間で通信する唯一の方法です。いいえ、任意のアプリを起動することはできません。

ただし、URL スキームを登録する任意のアプリを起動することは可能です。それが Apple のものであろうと、あなたのものであろうと、別の開発者のものであろうと。ドキュメントは次のとおりです。

アプリのカスタム URL スキームを定義する

電話の起動に関してはtel:、電話が起動する前に、リンクに少なくとも 3 桁の数字が必要なようです。そのため、番号をダイヤルせずにアプリにドロップすることはできません。

于 2009-01-07T05:35:38.453 に答える
79

別のアプリを開くことができるアプリを作成するのは簡単であることがわかりました。

と という 2 つのアプリがあるとFirstAppSecondAppます。FirstApp を開いたときに、ボタンをクリックして SecondApp を開くことができるようにしたいと考えています。これを行う解決策は次のとおりです。

  1. セカンドアプリで

    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 が開きます。

于 2014-06-04T09:31:42.033 に答える
30

リーの答えは、8より前のiOSでは絶対に正しいです。

iOS 9 以降では、LSApplicationQueriesSchemes キー (文字列の配列) の下の Info.plist で、アプリが照会するすべての URL スキームをホワイトリストに登録する必要があります。

ここに画像の説明を入力

于 2015-11-17T17:35:31.283 に答える
23

スイフトで

誰かが簡単な 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)
        }
于 2016-01-19T13:30:50.017 に答える
15

別のアプリケーションからアプリケーションを開くことができるようにするには、両方のアプリケーションで変更を加える必要があります。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 スキームの登録を含む新しいバージョンをアップロードする必要があります。

于 2017-05-25T08:07:13.457 に答える
11

これは、別のアプリ内からアプリケーションを起動するための優れたチュートリアルです:
iOS SDK: URL スキームの操作 そして、任意のアプリケーションを起動することはできませんが、 URL スキーム
を登録したネイティブ アプリケーションを起動します。

于 2011-12-26T11:04:24.817 に答える
8

次のコードを試すと、アプリケーションからアプリケーションを起動するのに役立ちます

注: 名前の空想を実際のアプリケーション名に置き換えます

NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];
于 2014-09-04T13:54:52.447 に答える
7

URL スキームを登録したアプリのみを起動できます。次に、sms: を使用して SMS アプリを開くのと同じように、URL スキームを使用してアプリを開くことができます。

これを示す LaunchMe というドキュメントに非常に良い例があります。

2017 年 11 月 6 日時点のLaunchMe サンプル コード

于 2009-01-07T11:43:10.987 に答える
3

私も少し前にこれを試しました(Launch iPhone Application with Identifier)が、これを行うための文書化された方法は絶対にありません。:)

于 2011-12-26T22:03:43.500 に答える