2012-02-03 15 views
5

Geçici dağıtım ile bir kurumsal uygulama için güncellemeler planlıyorum. Güncellemeler içinUygulamayı güncellemek için HTML href'e program aracılığıyla dokunun

Apple kullanıcı bir bağlantıyı bir HTML sayfasını ziyaret ve dokunun sahip olunmasını tavsiye:

href="itms-services://?action=download-manifest&url=http://example.com/
manifest.plist" 

bunu yapmak istemiyoruz http://help.apple.com/iosdeployment-apps/#app43ad871e

bakınız. Uygulamanın, başlatma sırasında güncellemeleri kontrol etmesini ve bir güncellemenin mevcut olduğunu UIAlertView kullanıcıyla uyarmasını istiyorum.

Şimdiye kadar yaptığım uygulamada şu şeyler vardıFilishLaunching. komplike Plist ayrıştırma örnek plist yapısından geliyor burada bulunabilir:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 1) { 
     NSLog(@"downloading full update"); 
     UIWebView *webView = [[UIWebView alloc] init]; 
     [webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"itms-services://?action=download-manifest&url=http://example.com/MyApp.plist"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]]; 
    } 
} 

birkaç nokta:: Biliyorum

  • http://help.apple.com/iosdeployment-apps/#app43ad78b3

    NSLog(@"checking for update"); 
    NSData *plistData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/MyApp.plist"]]; 
    if (plistData) { 
        NSLog(@"finished checking for update"); 
        NSError *error; 
        NSPropertyListFormat format; 
        NSDictionary *plist = [NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListImmutable format:&format error:&error]; 
        if (plist) { 
         NSArray *items = [plist valueForKey:@"items"]; 
         NSDictionary *dictionary; 
         if ([items count] > 0) { 
          dictionary = [items objectAtIndex:0]; 
         } 
         NSDictionary *metaData = [dictionary objectForKey:@"metadata"]; 
    
         float currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]; 
         float newVersion = [[metaData objectForKey:@"bundle-version"] floatValue]; 
         NSLog(@"newVersion: %f, currentVersion: %f", newVersion, currentVersion); 
         if (newVersion > currentVersion) { 
          NSLog(@"A new update is available"); 
          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Update available" message:@"A new update is available." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"UPDATE", nil]; 
          [alert show]; 
         }  
        } 
    } 
    

    Sonra benim UIAlertView temsilci yöntemine sahip [alert show], didFinish uygulamasında çağrılmamalı, ancak daha sonra değiştireceğim.

  • Ne kadar hızlı plistData indirileceğini ve bu yüklemenin uygulamayı nasıl etkilediğini bilmiyorum.
  • Daha da önemlisi, uyarı görüntüleme temsilci yöntemim çalışmıyor ve güncelleme indirilemiyor. WebView ile (nonatomic, güçlü) UIWebView * webView'i tanıtırken bile, yöntem hiçbir şey yapmaz.
  • Sanırım Dropbox, MIME'yi Google Chrome aracılığıyla indirebildiğim için doğru şekilde yapılandırıldı.

yüzden gerçekten ne gerek href bir HTML dokunarak bir kullanıcının hareket çoğaltmak için NSURLConnection kullanarak yolu (NSURLRequest vs.) 'dir. Bundan sonra tam güncelleme gerçekleşeceğini düşünüyorum.

otomatik o itms-hizmetler için çalışıp çalışmadığını bilmiyorum

[[UIApplication sharedApplication] openURL:...]; 

kullanarak bir URL açabilir

cevap

5

: URL'ler, ancak tel gibi diğer ısmarlama URL şemaları :, fb için çalışır: vb yüzden Apple özellikle engellemediyse yapmalı.

+1

Apple, bu şekilde itms hizmetlerini kullanarak engellemeye başlamış görünüyor. Neyse ki, kullanıcılardan hala, itms hizmetlerini içeren bir href bağlantısına dokunmaları istenebilir. –

+0

Ayrıca uygulama içinden itms hizmetleri URL'lerini açma başarısız oldu. Bu, kullanıcının bir web sayfasındaki bir indirme düğmesini bulup basması için birkaç ekstra dokunuş anlamına geliyor. Yine de bir web sayfasından yapılabiliyor olsa bile neden bunu engellediklerini bilmiyorum. –

+0

Bu Simülatörde çalışmıyor gibi görünüyor, ancak gerçek bir cihazda gayet iyi. Bir süreliğine kafam karıştı. –

İlgili konular