2010-08-18 7 views
33

Tôi đang phát triển một ứng dụng iPhone sẽ cài đặt một vài ứng dụng của bên thứ ba trong một doanh nghiệp. Tôi có thông tin về ID gói. Có cách nào để kiểm tra xem ứng dụng đã được cài đặt chưa, sử dụng một số API hệ thống? Hiện tại ứng dụng được cài đặt lại, ghi đè cài đặt hiện tại. Tôi cần phải ngăn chặn điều này như thế nào. (Ứng dụng AppStore của Apple sẽ tắt tùy chọn cài đặt nếu ứng dụng đã được cài đặt.)Cách kiểm tra theo chương trình nếu ứng dụng được cài đặt?

+2

bản sao có thể có của [cách kiểm tra ứng dụng đã cài đặt trong thiết bị iphone] (http://stackoverflow.com/questions/3243567/how-to-check-installed-application-in-iphone-device) –

+0

có thể wiki này sẽ trợ giúp bạn cũng vậy: http://wiki.akosma.com/IPhone_URL_Schemes Sự cố với hầu hết các lược đồ url là, bạn không thể chuyển qua bất kỳ dữ liệu nào nếu bạn không có id người dùng của ứng dụng mà bạn đang gọi –

+0

http://stackoverflow.com/questions/32643522/fbsdksharedialog-of-facebook-sdk-is-not-working-on-ios9/39159507#39159507 – TharakaNirmana

Trả lời

57

Tôi nghĩ rằng điều này là không thể trực tiếp, nhưng nếu ứng dụng đăng ký chương trình uri bạn có thể kiểm tra.

Lược đồ URI là ví dụ fb:// cho ứng dụng facebook. Bạn có thể đăng ký điều đó trong info.plist của ứng dụng của bạn. [UIApplication canOpenURL:url] sẽ cho bạn biết nếu một url nhất định sẽ hoặc sẽ không mở. Vì vậy, kiểm tra nếu fb:// sẽ mở ra, sẽ cho biết rằng có một ứng dụng được cài đặt đã đăng ký fb:// - đó là một gợi ý tốt cho ứng dụng 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"]]; 
} 
+0

"nhưng nếu các ứng dụng đăng ký các sơ đồ uri bạn có thể kiểm tra cho điều đó": Có thể bạn hãy giải thích điều này thêm một chút? – attisof

31

Dưới đây là một ví dụ để kiểm tra xem các ứng dụng facebook được cài đặt

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

Đối với bất cứ ai cố gắng để làm điều này với iOS 9/Swift 2:

Trước tiên, bạn sẽ cần phải ' đưa danh sách trắng vào URL bằng cách thêm thông tin sau vào tệp Info.plist của bạn (một tính năng bảo mật - xem Leo Natan's answer):

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

Sau đó, bạn có thể đặt câu hỏi liệu các ứng dụng có sẵn và có một kế hoạch đã đăng ký:

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

Nó làm việc cho tôi, Cảm ơn –

1

Khi nói đến các mạng xã hội, nó là tốt nhất để kiểm tra nhiều đề án. (Bởi vì chương trình 'fb' là lỗi thời cho IOS9 SDK ví dụ.):

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; 
} 

Tất nhiên Info.plist cũng nên chứa tất cả các chương trình cần thiết:

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

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) 
     } 
    } 
} 

Thêm những trong Info.plist:

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