OMA OTA Downlod Description
簡稱 OMA DD
用OMA DD在google中搜尋, 可以找到很多資料, 但很多都是癈話
在講到OMA DD時, 一定都會講到DRM
什麼是DRM, 簡單講就是數位版權管理
所以在google中找到的都在講drm, dm
反而真正的DD到底怎麼做, 講到的很少
很多也都是洋鬼子文, 不知所芸
在這介紹這個Download Description, 只討論 DD, 不討論 DRM
DRM牽涉的範圍太廣了, 我也不是太懂, 所以不討論
這個Script是用XML組成的, 例如
<media xmlns="">
<objectURI>http://1.2.3.4/abc.gif</objectURI>
<size>123</size>
<type>image/gif</type>
<type>application/vnd.oma.drm.message</type>
<name>abc</name>
<vendor>abc</vendor>
<description>abc</description>
</media>
在這個Script是用<media>包起來的, 底下三個欄位是必須的
1. objectURI : 要被下載的檔案的完整URL
2. type : 要被下載的檔案的 MIME Type
3. size : 被下載檔案的size(單位是byte)
非必須的欄位有:
1. installNotifyURI : 安裝完或下載完通知的 URL
2. nextURL : 結束下載後轉至的 URL
3. DDVersion : 檔案版本 (有些手機對於java程式必須指定, 不然無法下載)
4. name : 下載檔案的名稱, 可自行取, 不用跟檔名一致
5. description : 簡單的描述
6. vendor : 作者
7. infoURL : 檔案說明的 URL (非常沒有用)
8. iconURI : 檔案的 icon 圖示的 URL
9. installParam : 安裝時額外的參數
在非必須的欄位中有兩個欄位要注意的
1. installNotifyURI : 這個欄位在下載完或安裝完時, 會通知你指定的 URL,
這樣可以知道, 用戶有沒有下載成功, 這在Internet的環境中是無法得知的,
其用意是讓營運商計費用的, 也可以正確的統計下載次數
2. nextURL : 這個欄位是在下載完後, 通知WAP轉至指定的URL, 在這個頁面,
你可以用上面的Info, 馬上統計出下載量, 也可以馬上顯示感謝下載的頁面,
或其他你想得到的(有些手機要成功下載才會轉至此 URL)
installNotifyURI的通知方式是用POST的方式, 在你指定的頁面接收POST的值就可以得知下載結果
POST的內容有
1. 900 Success : 成功下載完成
2. 901 Insufficient memory : 手機不接受此檔案的規格或手機的記憶體已不足存放此檔案
3. 902 User Cancelled : 用戶自行取消下載
4. 903 Loss of Service : 下載時手機無訊號
5. 905 Attribute mismatch : 實際的檔案屬性與DD檔中描述的不一致
6. 906 Invalid descriptor : 錯誤的DD檔 (DD檔格式都不對了, 怎麼會回傳Status呢????)
7. 951 Invalid DDVersion : 不正確的版本宣告
8. 952 Device Aborted : 與 901 訊息類似, 也是不支援或記憶體不足所造成的
9. 953 Non-Acceptable Content : 手機不支援此檔案
10. 954 Loader Error : objectURI所指定的 URL 錯誤, 找不到下載的檔案或檔案有問題
底下是PHP的範例:
download.php
<?
header("Content-Type: application/vnd.oma.dd+xml");
header("Cache-Control: private");
$file = $_GET['file'];
$xml = "<media xmlns=\"">";
$xml .= "<objectURI>http://1.2.3.4/$file</objectURI>";
$xml .= "<size>".filesize($file)."</size>";
$xml .= "<type>".content_mine_type($file)."</type>";
$xml .= "<type>application/vnd.oma.dd+xml</type>"; //這一行好像可以不用, 我不確定!!!
$xml .= "<name>abc</name>";
$xml .= "<vendor>CDGod</vendor>";
$xml .= "<description>demo</description>";
$xml .= "<installNotifyURI>http://1.2.3.4/notify.php?file=$file</installNotifyURI>";
$xml .= "<nextURL>http://1.2.3.4/dlok.php?file=$file</nextURL>";
$xml .= "</media>";
header("Content-Length: ".strlen($xml));
print $xml;
?>
notify.php
<?
$file = $_GET['file'];
$notifystr = file_get_contents("php://input")."\r\n"; // Get RAW POST DATA
$fp = fopen($file."_notify.log", "a");
fputs($fp, $notifystr);
fclose($fp);
?>
dlok.php
<?
$file = $_GET['file'];
echo $file." download success!!!";
?>