前言:
在客戶端版本更新中,常用有兩種更新方式,一是上架應用寶和蘋果應用商店,二是上傳到服務器,客戶端做包版本更新檢測,今天,小編給大家詳細講解一下客戶端版本更新原理。
話不多說,文件更新如圖所示:
在常見包更新中,安卓apk包通過訪問服務器http:xxx.apk包文件下載地址直接更新,而ios包則需要先讀取plist文件,獲取URL地址,來實現。
Plist文件說明
Plist文件用於iOS企業版app更新,客戶端並不是直接訪問ios下載,而是通過讀取Plist文件,獲取URL下載地址,通過https請求訪問,獲取ipa文件下載地址。
plist是指.plist後綴的文件,文件存儲的下載版本信息,以及下載URL,其文件格式如下:
那麼,作爲一名PHPer,我們應該怎麼生成plist文件了,接下來,爲大家詳細講解。
①封裝生成plist文件代碼
/**
* 生成xml格式
* @param $url
* @param $title
* @return string
*/
public function xml($url,$title){
header("Content-type:text/xml;charset=utf-8");
$html = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>'.$url.'</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>cdnhttps.demo.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>cdnhttps.demo.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.demo</string>
<key>bundle-version</key>
<string>1.0.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>'.$title.'</string>
</dict>
</dict>
</array>
</dict>
</plist>';
return $html;
}
②封裝生成Plist文件方法
/**
* 生成plist文件
* @param $link
* @param $title
* @param $filename
*/
public function Plist($link,$title,$filename){
// 生成plist文件
$xml = $this->xml($link,$title);
$myfile = fopen($filename, "w") or die("Unable to open file!");
$resource = fwrite($myfile, $xml);
fclose($myfile);
if($resource){
$data['url'] = $filename;
}else{
$data['url'] = '';
}
return $data;
}
③調用plist方法生成文件
// ipa格式生成plist文件
public function uploadPlist(){
$url = 'https://demo.cn/web/156453846783.ipa';
// 生成plist文件
$title = '包名';
$link = $url; // ipa下載地址
$filename = 'demo.plist'; // plist文件名
$plist = $this->Plist($link,$title,$filename);
$data['url'] = $plist['url'];
echo $data;
}
簡單三步,直接生成plist文件,通過情況下,plist文件會保存在服務器跟目錄下,與圖片上傳的目錄一直,laravel框架則默認在upload中。
當plist文件生成完畢後,我們可以選擇上傳到服務器或七牛雲保存,將生成好的plist文件路徑返回客戶端,這樣一個完整的實現過程就講解完畢了。
注意事項:
plist文件放到支持https的服務器上;(重點支持https)
客戶端接受處理Plist文件,獲取到plist文件的下載地址,並把它懟到下面那個地址裏:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-services://?action=download-manifest&url=你的plist文件的下載鏈接"]];
# 解釋--itms-services://?action=download-manifest&url= 這句系統的一個協議命令。