itms-services協議:跳轉網頁部署及PHP動態生成 iOS渠道包IPA一鍵安裝之plist

相信不少人嘗試過使用揣果測試庫(http://ipa.chuaiguo.com/)的無線安裝測試IPA安裝包功能。有心人必定注意到其itms-services協議的一鍵安裝地址的url=部分並非咱們常見的plist文件路徑,而是一個install.php經過增長參數的形式自動生成輸出了plist。以前由於筆者的項目中渠道包很少,因此懶得去寫這樣一個文件幫助部署,但是最近,筆者的項目的渠道包不斷增多了,顯然部署多個plist文件管理上彷佛愈來愈麻煩了,因而筆者開始仿照揣果實現了並結合本身項目的需求,實現了PHP動態生成 iOS渠道包IPA一鍵安裝之plist。這裏跟你們分享一下,但願對您有所幫助。javascript

 <!--**
* index.html
* iOS渠道包一鍵安裝跳轉頁面。
* Created by pcjbird on 2015-05-28
* Copyright (c) 2015年 Zero Status. All rights reserved.
*-->
<html>
<head>
<title>iOS 一鍵安裝</title>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />

<script type="text/javascript">

function doLocation(url)
{
 var a = document.createElement("a");
 if(!a.click) 
 {
 window.location = url;
 return;
 }
 a.setAttribute("href", url);
 a.style.display = "none";
 document.body.appendChild(a);
 a.click();
}

function getQueryString(str)
{
 var rs=new RegExp("(^|)"+str+"=([^&]*)(&|$)","gi").exec(locString),tmp;
 if(tmp=rs)return tmp[2];
 return "";
}

</script>

</head>

<body>
下載中...
<script type="text/javascript">

var locString=String(window.document.location.href);
var cid = getQueryString('cid');
var sslServer = 'https://www.lessney.com/';
var mainChannelId = 2;
var curVersionName = '1.0.3';
if (!cid) 
{
 cid = mainChannelId;
}

doLocation('itms-services://?action=download-manifest&url=' + encodeURIComponent(sslServer + 'install.php?v=' + curVersionName + '&cid=' + cid));


</script>
</body>
</html>
 <?php
/**
* install.php
* PLIST文件生成器,用於iOS渠道包一鍵安裝。
* Created by pcjbird on 2015-05-28
* Copyright (c) 2015年 Zero Status. All rights reserved.
*/

//判斷是否爲字典數組(dict)
function isDict($array)
{
 return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));

}

//向xml節點中寫入字典數組(dict)
function xmlWriteDict(XMLWriter $x, &$dict) 
{
 $x->startElement('dict');
 foreach($dict as $k => &$v) 
 {
 $x->writeElement('key', $k);
 xmlWriteValue($x, $v);
 }
 $x->endElement();
}
 
 //向xml節點中寫入數組(array)
function xmlWriteArray(XMLWriter $x, &$arr) 
{
 $x->startElement('array');
 foreach($arr as &$v)
 xmlWriteValue($x, $v);
 $x->endElement();
}

//根據類型向xml節點中寫入值
function xmlWriteValue(XMLWriter $x, &$v) 
{
 if (is_int($v) || is_long($v))
 $x->writeElement('integer', $v);
 elseif (is_float($v) || is_real($v) || is_double($v))
 $x->writeElement('real', $v);
 elseif (is_string($v))
 $x->writeElement('string', $v);
 elseif (is_bool($v))
 $x->writeElement($v?'true':'false');
 elseif (isDict($v))
 xmlWriteDict($x, $v);
 elseif (is_array($v))
 xmlWriteArray($x, $v);
 else 
 {
 trigger_error("Unsupported data type in plist ($v)", E_USER_WARNING);
 $x->writeElement('string', $v);
 }
}

//建立plist
function createplist()
{
 $ssl_server = 'https://www.lessney.com/';
 $target_name = 'Sample';
 $bundle_identifier = 'com.lessney.' . $target_name;
 $subtitle = 'Zero Status Inc.';
 $title = '示例程序';
 $versionname = $_GET['v'];
 if (!$versionname) 
 {
 $versionname = '1.0.0';
 }
 $versioncode = str_replace('.', '', $versionname);
 $channelid = $_GET['cid'];
 if (!$channelid) 
 {
 $channelid = '0';
 }

 header('Content-Type: application/xml');
 $plist = new XmlWriter();
 $plist->openMemory();
 $plist->setIndent(TRUE);
 $plist->startDocument('1.0', 'UTF-8');
 $plist->writeDTD('plist', '-//Apple//DTD PLIST 1.0//EN', 'http://www.apple.com/DTDs/PropertyList-1.0.dtd');
 $plist->startElement('plist');
 $plist->writeAttribute('version', '1.0');

 $pkg = array();
 $pkg['kind'] = 'software-package';
 $pkg['url'] = $ssl_server . $target_name .'_v' . $versioncode . '_' .$channelid . '.ipa';

 $displayimage = array();
 $displayimage['kind'] = 'display-image';
 $displayimage['needs-shine'] = TRUE;
 $displayimage['url'] = $ssl_server . 'Icon.png';

 $fullsizeimage = array();
 $fullsizeimage['kind'] = 'full-size-image';
 $fullsizeimage['needs-shine'] = TRUE;
 $fullsizeimage['url'] = $ssl_server . 'iTunesArtwork.png';

 $assets = array();
 $assets[] = $pkg;
 $assets[] = $displayimage;
 $assets[] = $fullsizeimage;

 $metadata = array();
 $metadata['bundle-identifier'] = $bundle_identifier;
 $metadata['bundle-version'] = $versionname;
 $metadata['kind'] = 'software';
 $metadata['subtitle'] = $subtitle;
 $metadata['title'] = $title;

 $items0 = array();
 $items0['assets'] = $assets;
 $items0['metadata'] = $metadata;

 $items = array();
 $items[] = $items0;

 $root = array();
 $root['items'] = $items;

 xmlWriteValue($plist, $root);

 $plist->endElement();
 $plist->endDocument();

 return $plist->outputMemory();
}

//輸出plist
echo createplist();

?>

itms-services協議:跳轉網頁部署及PHP動態生成 iOS渠道包IPA一鍵安裝之plist地址 - install.php - 原創 | Zero Status - 1

轉載請註明:Zero Status » itms-services協議:跳轉網頁部署及PHP動態生成 iOS渠道包IPA一鍵安裝之plist地址php

相關文章
相關標籤/搜索