在iPhone上安裝配置文件 - 以編程方式我想用我的iPhone應(yīng)用程序發(fā)送配置文件,并在需要時(shí)安裝它。請(qǐng)注意,我們談?wù)摰氖桥渲梦募?,而不是配置文件。首先,這樣的任務(wù)是可能的。如果您在網(wǎng)頁(yè)上放置配置文件并從Safari中單擊它,它將被安裝。如果您通過(guò)電子郵件發(fā)送配置文件并單擊附件,它也將安裝。在這種情況下,“已安裝”意味著“調(diào)用安裝UI” - 但我甚至無(wú)法做到這一點(diǎn)。所以我的理論是,啟動(dòng)配置文件安裝涉及以URL的形式導(dǎo)航到它。我將個(gè)人資料添加到了我的應(yīng)用包中。A)首先,我嘗試將[sharedApp openURL]與file:// URL一起放入我的包中。沒(méi)有這樣的運(yùn)氣 - 什么都沒(méi)發(fā)生B)然后我在我的包中添加了一個(gè)HTML頁(yè)面,其中包含指向配置文件的鏈接,并將其加載到UIWebView中。點(diǎn)擊鏈接什么都不做。但是,從Safari中的Web服務(wù)器加載相同的頁(yè)面可以正常工作 - 鏈接是可點(diǎn)擊的,配置文件會(huì)安裝。我提供了一個(gè)UIWebViewDelegate,對(duì)每個(gè)導(dǎo)航請(qǐng)求回答“是” - 沒(méi)有區(qū)別。C)然后我嘗試從我的包中加載相同的網(wǎng)頁(yè)在Safari中(使用[sharedApp openURL] - 沒(méi)有任何反應(yīng)。我猜,Safari無(wú)法看到我的應(yīng)用包內(nèi)的文件。D)在Web服務(wù)器上上傳頁(yè)面和配置文件是可行的,但在組織層面上卻很痛苦,更不用說(shuō)額外的故障源(如果沒(méi)有3G覆蓋等等)。所以我的重要問(wèn)題是:**如何以編程方式安裝配置文件?小問(wèn)題是:什么可以使UIWebView中的鏈接不可點(diǎn)擊?是否可以在Safari中從我的包中加載file:// URL ?如果沒(méi)有,iPhone上是否有本地位置可以放置文件,Safari可以找到它們?編輯B):?jiǎn)栴}是某種程度上我們正在鏈接到個(gè)人資料。我將它從.mobileconfig重命名為.xml(因?yàn)樗娴氖荴ML),改變了鏈接。這個(gè)鏈接在我的UIWebView中工作。重新命名 - 同樣的東西??雌饋?lái)UIWebView似乎不愿意做應(yīng)用程序范圍的事情 - 因?yàn)榘惭b配置文件會(huì)關(guān)閉應(yīng)用程序。我嘗試通過(guò)UIWebViewDelegate告訴它沒(méi)關(guān)系 - 但這并沒(méi)有讓人信服。mailto的相同行為:UIWebView中的URL。對(duì)于mailto: URL,常見(jiàn)的技巧是將它們轉(zhuǎn)換為[openURL]調(diào)用,但這對(duì)我的情況并不適用,請(qǐng)參閱方案A.對(duì)于itms:URL,然而,UIWebView按預(yù)期工作...EDIT2:嘗試通過(guò)[openURL]向Safari提供數(shù)據(jù)URL - 不起作用EDIT3:發(fā)現(xiàn)了很多關(guān)于Safari如何不支持file:// URL的信息。然而,UIWebView非常有用。此外,模擬器上的Safari打開(kāi)它們就好了。后一點(diǎn)是最令人沮喪的。編輯4:我從未找到解決方案。相反,我整理了一個(gè)兩位的Web界面,用戶(hù)可以通過(guò)電子郵件訂購(gòu)配置文件。
3 回答

holdtom
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
malinois的答案對(duì)我有用,但是,我想要一個(gè)在用戶(hù)安裝mobileconfig后自動(dòng)返回應(yīng)用程序的解決方案。
這花了我4個(gè)小時(shí),但這里是解決方案,建立在malinois的想法,即擁有一個(gè)本地的http服務(wù)器:你將HTML返回到自我更新的safari; 第一次服務(wù)器返回mobileconfig,第二次返回自定義url-scheme以返回到您的應(yīng)用程序。用戶(hù)體驗(yàn)是我想要的:應(yīng)用程序調(diào)用safari,safari打開(kāi)mobileconfig,當(dāng)用戶(hù)在mobileconfig上點(diǎn)擊“完成”,然后safari再次加載你的應(yīng)用程序(自定義網(wǎng)址方案)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // Override point for customization after application launch. _httpServer = [[RoutingHTTPServer alloc] init]; [_httpServer setPort:8000]; // TODO: make sure this port isn't already in use _firstTime = TRUE; [_httpServer handleMethod:@"GET" withPath:@"/start" target:self selector:@selector(handleMobileconfigRootRequest:withResponse:)]; [_httpServer handleMethod:@"GET" withPath:@"/load" target:self selector:@selector(handleMobileconfigLoadRequest:withResponse:)]; NSMutableString* path = [NSMutableString stringWithString:[[NSBundle mainBundle] bundlePath]]; [path appendString:@"/your.mobileconfig"]; _mobileconfigData = [NSData dataWithContentsOfFile:path]; [_httpServer start:NULL]; return YES;}- (void)handleMobileconfigRootRequest:(RouteRequest *)request withResponse:(RouteResponse *)response { NSLog(@"handleMobileconfigRootRequest"); [response respondWithString:@"<HTML><HEAD><title>Profile Install</title>\ </HEAD><script> \ function load() { window.location.href='http://localhost:8000/load/'; } \ var int=self.setInterval(function(){load()},400); \ </script><BODY></BODY></HTML>"]; } - (void)handleMobileconfigLoadRequest:(RouteRequest *)request withResponse:(RouteResponse *)response { if( _firstTime ) { NSLog(@"handleMobileconfigLoadRequest, first time"); _firstTime = FALSE; [response setHeader:@"Content-Type" value:@"application/x-apple-aspen-config"]; [response respondWithData:_mobileconfigData]; } else { NSLog(@"handleMobileconfigLoadRequest, NOT first time"); [response setStatusCode:302]; // or 301 [response setHeader:@"Location" value:@"yourapp://custom/scheme"]; }}
...這里是從app調(diào)用的代碼(即viewcontroller):
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://localhost:8000/start/"]];
希望這有助于某人。
- 3 回答
- 0 關(guān)注
- 1010 瀏覽
添加回答
舉報(bào)
0/150
提交
取消