web-dev-qa-db-ja.com

アプリがインストールされているかどうかをプログラムで確認する方法は?

企業にサードパーティ製アプリケーションをほとんどインストールしないiPhoneアプリケーションを開発しています。バンドルIDに関する情報があります。いくつかのシステムAPIを使用して、アプリケーションが既にインストールされているかどうかを確認する方法はありますか?現在、アプリケーションは再びインストールされ、現在のインストールが上書きされます。これをなんとか防ぐ必要があります。 (アプリが既にインストールされている場合、AppleのAppStoreアプリケーションはインストールオプションを無効にします。)

39
attisof

これは直接は不可能だと思いますが、アプリがuriスキームを登録していれば、それをテストできます。

URIスキームは、たとえばfb:// Facebookアプリの場合。アプリのinfo.plistに登録できます。 [UIApplication canOpenURL:url]は、特定のURLが開くかどうかを示します。したがって、fb://が開き、登録されたアプリがインストールされていることを示しますfb://-facebookアプリの良いヒントです。

// check whether facebook is (likely to be) installed or not
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
    // Safe to launch the facebook app
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/200538917420"]];
}
62
mvds

Facebookアプリがインストールされているかどうかをテストする例を次に示します

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
    // Facebook app is installed
}
31
AlBeebe

IOS 9/Swift 2でこれを行おうとする場合:

最初に、以下をInfo.plistファイルに追加して、URLを「ホワイトリスト化」する必要があります(セキュリティ機能- レオナタンの答え を参照)。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>

その後、アプリが利用可能であり、登録されたスキームを持っているかどうかを尋ねることができます:

guard UIApplication.sharedApplication().canOpenURL(NSURL(string: "fb://")!) else {
    NSLog("No Facebook?  You're a better man than I am, Charlie Brown.")
    return
}
24

Swift 3.1、Swift 3.2、Swift 4

if let urlFromStr = URL(string: "fb://") {
    if UIApplication.shared.canOpenURL(urlFromStr) {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(urlFromStr)
        }
    }
}

これらをInfo.plistに追加します。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>
4
Vini App

ソーシャルネットワークに関しては、複数のスキームをチェックするのが最善です。 (たとえば、スキーム 'fb'はIOS9 SDKでは廃止されているためです。):

NSArray* fbSchemes = @[
     @"fbapi://", @"fb-messenger-api://", @"fbauth2://", @"fbshareextension://"];
BOOL isInstalled = false;

for (NSString* fbScheme in fbSchemes) {
    isInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:fbScheme]];
    if(isInstalled) break;
}

if (!isInstalled) {
    // code
    return;
}

もちろん、Info.plistには必要なすべてのスキームも含める必要があります。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>
1

iOS 9以降のアップデート:

いくつかのセキュリティの変更により、iOS 9で開始されたApple他の回答で言及されたcanOpenURLに加えて、info.plistの文字列でLSApplicationQueriesSchemes配列を追加する必要があります。例のスクリーンショットを参照してくださいTwitterを使用します。

info.plist LSApplicationQueriesSchemes array

Facebookを追加する場合は、配列に「fb」の文字列値を持つ別のアイテムを追加するだけです。

0
D. Pratt