亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在iPhone上安裝配置文件 - 以編程方式

在iPhone上安裝配置文件 - 以編程方式

不負相思意 2019-08-15 16:12:56
在iPhone上安裝配置文件 - 以編程方式我想用我的iPhone應用程序發送配置文件,并在需要時安裝它。請注意,我們談論的是配置文件,而不是配置文件。首先,這樣的任務是可能的。如果您在網頁上放置配置文件并從Safari中單擊它,它將被安裝。如果您通過電子郵件發送配置文件并單擊附件,它也將安裝。在這種情況下,“已安裝”意味著“調用安裝UI” - 但我甚至無法做到這一點。所以我的理論是,啟動配置文件安裝涉及以URL的形式導航到它。我將個人資料添加到了我的應用包中。A)首先,我嘗試將[sharedApp openURL]與file:// URL一起放入我的包中。沒有這樣的運氣 - 什么都沒發生B)然后我在我的包中添加了一個HTML頁面,其中包含指向配置文件的鏈接,并將其加載到UIWebView中。點擊鏈接什么都不做。但是,從Safari中的Web服務器加載相同的頁面可以正常工作 - 鏈接是可點擊的,配置文件會安裝。我提供了一個UIWebViewDelegate,對每個導航請求回答“是” - 沒有區別。C)然后我嘗試從我的包中加載相同的網頁在Safari中(使用[sharedApp openURL] - 沒有任何反應。我猜,Safari無法看到我的應用包內的文件。D)在Web服務器上上傳頁面和配置文件是可行的,但在組織層面上卻很痛苦,更不用說額外的故障源(如果沒有3G覆蓋等等)。所以我的重要問題是:**如何以編程方式安裝配置文件?小問題是:什么可以使UIWebView中的鏈接不可點擊?是否可以在Safari中從我的包中加載file:// URL ?如果沒有,iPhone上是否有本地位置可以放置文件,Safari可以找到它們?編輯B):問題是某種程度上我們正在鏈接到個人資料。我將它從.mobileconfig重命名為.xml(因為它真的是XML),改變了鏈接。這個鏈接在我的UIWebView中工作。重新命名 - 同樣的東西。看起來UIWebView似乎不愿意做應用程序范圍的事情 - 因為安裝配置文件會關閉應用程序。我嘗試通過UIWebViewDelegate告訴它沒關系 - 但這并沒有讓人信服。mailto的相同行為:UIWebView中的URL。對于mailto: URL,常見的技巧是將它們轉換為[openURL]調用,但這對我的情況并不適用,請參閱方案A.對于itms:URL,然而,UIWebView按預期工作...EDIT2:嘗試通過[openURL]向Safari提供數據URL - 不起作用EDIT3:發現了很多關于Safari如何不支持file:// URL的信息。然而,UIWebView非常有用。此外,模擬器上的Safari打開它們就好了。后一點是最令人沮喪的。編輯4:我從未找到解決方案。相反,我整理了一個兩位的Web界面,用戶可以通過電子郵件訂購配置文件。
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

malinois的答案對我有用,但是,我想要一個在用戶安裝mobileconfig后自動返回應用程序的解決方案。

這花了我4個小時,但這里是解決方案,建立在malinois的想法,即擁有一個本地的http服務器:你將HTML返回到自我更新的safari; 第一次服務器返回mobileconfig,第二次返回自定義url-scheme以返回到您的應用程序。用戶體驗是我想要的:應用程序調用safari,safari打開mobileconfig,當用戶在mobileconfig上點擊“完成”,然后safari再次加載你的應用程序(自定義網址方案)。

- (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調用的代碼(即viewcontroller):

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://localhost:8000/start/"]];

希望這有助于某人。


查看完整回答
反對 回復 2019-08-15
  • 3 回答
  • 0 關注
  • 1011 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號