企業にサードパーティ製アプリケーションをほとんどインストールしないiPhoneアプリケーションを開発しています。バンドルIDに関する情報があります。いくつかのシステムAPIを使用して、アプリケーションが既にインストールされているかどうかを確認する方法はありますか?現在、アプリケーションは再びインストールされ、現在のインストールが上書きされます。これをなんとか防ぐ必要があります。 (アプリが既にインストールされている場合、AppleのAppStoreアプリケーションはインストールオプションを無効にします。)
これは直接は不可能だと思いますが、アプリが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"]];
}
Facebookアプリがインストールされているかどうかをテストする例を次に示します
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// Facebook app is installed
}
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
}
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>
ソーシャルネットワークに関しては、複数のスキームをチェックするのが最善です。 (たとえば、スキーム '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>