如何判斷ios裝置中是否安裝了某款應用

來源:互聯網
上載者:User

            主要思路就是 ,在要被識別的應用程式B的XCode的info.plist中

       如果是Xcode 4.2  ,那麼

       1. 在info.plist 中 增加 一個  URL  Schemes: XXX

           添加的具體細節是:

           1.1 開啟 info.plist  ,在 Information Property List的下面增加一項:URL  types

           1.2 然後在 URL Types  下面增加一項  Item 0 ,這是個Dictionary

           1.3 在 Item0 下面增加一個 URL Schemes  類型的 Array

           1.4  然後在URL Schemes 的下面增加一個 URL  identifier ,String值可以不填

                  在 Item0 的下面增加一個 Item0,  String值就是 XXX 就可以了。


          開始在網上 看到說添加 URL  Schemes ,以為直接添加到 Information Property List 下面的一項,key為 URL Schemes ,值為  XXX就ok了,後面發現不起作用。這個裡面只能添加指定的類型,會自動提示相關的類型,正確的方法是上面的過程。


      如果是Xcode 4.6 ,那麼按照下面的方法添加:

      解決方案:

從91SDK3.2.5開始要求接入方需要設定一個URL Scheme,設定方法如下:選中工程中的Target,選中Info標籤頁,找到底下的URL
Types,展開,點擊加號,建立一個新的URL Scheme。

 

點擊後,Identifier欄位填入你的軟體標識符,URL Schemes欄位填入格式為:91-xxxxx,其中xxxx為你的軟體標識符。Role欄位可以設定為None,Icon欄位可以不填。樣本如下:


 




        2. 然後 在主動裝置的應用程式A中,通過   這個方法判斷手機中是否存在這個應用B
         [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"XXX://"]];
         如果返回YES則表示此應用在手機中安裝過,反之則沒有安裝過.


         具體代碼如下:

         

-(BOOL)  APCheckIfAppInstalled2:(NSString *)urlSchemes{    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlSchemes]])    {        NSLog(@" installed");        return  YES;    }    else    {        return  NO;    }}

   調用  APCheckIfAppInstalled2:XXX   就可以判斷 是否安裝了應用程式B 了。


   這個方法不管對越獄過的iOS裝置還是沒有越獄過的裝置都生效。


   還有另外一個 查看 

com.apple.mobile.installation.plist  系統檔案的方法,通過 bundle identifier 來判斷,但是只能判斷越獄機,因為越獄機才能訪問到這個檔案,在非越獄的機器中,因為不允許應用程式訪問沙箱環境以外的目錄,所以不能讀取這個檔案,甚至判斷這個檔案是否存在都會失敗。

   代碼如下:

   

-(BOOL)  APCheckIfAppInstalled:(NSString *)bundleIdentifier{    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];        NSDictionary *cacheDict = nil;    NSString *path = nil;    // Loop through all possible paths the cache could be in    for (short i = 0; 1; i++)    {        switch (i)        {            case 0: // Jailbroken apps will find the cache here; their home directory is /var/mobile                path = [NSHomeDirectory() stringByAppendingPathComponent: relativeCachePath];                break;            case 1: // App Store apps and Simulator will find the cache here; home (/var/mobile/) is 2 directories above sandbox folder                path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];                break;            case 2: // If the app is anywhere else, default to hardcoded /var/mobile/                path = [@"/var/mobile"      stringByAppendingPathComponent: relativeCachePath];                break;                default: // Cache not found (loop not broken)                return NO;            break;        }                BOOL isDir = NO;        if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] ) // Ensure that file exists        {            if (isDir == YES)            {                NSLog(@"Dir");            }            else            {                cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];            }        }                    if (cacheDict) // If cache is loaded, then break the loop. If the loop is not "broken," it will return NO later (default: case)            break;    }        NSDictionary *system = [cacheDict objectForKey: @"System"]; // First check all system (jailbroken) apps    if ([system objectForKey: bundleIdentifier])        return YES;        NSDictionary *user = [cacheDict objectForKey: @"User"]; // Then all the user (App Store /var/mobile/Applications) apps        if ([user objectForKey: bundleIdentifier])        return YES;        // If nothing returned YES already, we'll return NO now    return NO;}

       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.