Laravel 框架生成 Plist 資料

PHPer技術棧發表於2019-08-01

前言:

在客戶端版本更新中,常用有兩種更新方式,一是上架應用寶和蘋果應用商店,二是上傳到伺服器,客戶端做包版本更新檢測,今天,小編給大家詳細講解一下客戶端版本更新原理。
話不多說,如圖所示:

laravel框架生成Plist資料

在常見包更新中,安卓apk包通過訪問伺服器http:xxx.apk包檔案下載地址直接更新,而ios包則需要先讀取plist檔案,獲取URL地址,來實現。

Plist檔案說明

Plist檔案用於iOS企業版app更新,客戶端並不是直接訪問ios下載,而是通過讀取Plist檔案,獲取URL下載地址,通過https請求訪問,獲取ipa檔案下載地址。
plist是指.plist字尾的檔案,檔案儲存的下載版本資訊,以及下載URL,其檔案格式如下:

laravel框架生成Plist資料

那麼,作為一名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= 這句系統的一個協議命令。

參考文件:https://www.jianshu.com/p/85d5dbb71164

相關文章