2012-09-12 24 views
0

我正在開發一個使用Dropbox SDK的ios應用程序。我想在Dropbox中的任何文件被編輯時通知用戶。我不知道如果Dropbox提供任何API,但我認爲蘋果的推送通知會很好。根據我的研究,在Dropbox SDK中存在類似/ delta的內容,但沒有足夠的資源或示例編碼出Internet來理解/ delta。如何解析服務器上的dropbox rss feed

我要的是:

Dropbox的文件變化---->我的服務器檢測到什麼改變,發送到蘋果----->蘋果推送通知服務發送通知------ - > IOS設備接收通知

所以目前我完成了推送通知部分我的應用程序,我可以通過本地apache服務器和php腳本發送一個簡單的通知給我的應用程序。設備收到通知。

我的問題是如何實現

這部分Dropbox的文件變化---->我的服務器檢測到什麼改變,發送到蘋果----->

我不知道如何解析我的保管箱文件夾的rss feed。我應該用什麼語言解析Dropbox上的數據? 我應該不斷輪詢並檢查是否有任何文件被編輯? 或者有沒有一種方式,Dropbox發送通知直接到我的服務器或蘋果通知服務器,所以我不需要一直在輪詢更改?

由於提前

回答

0

你會想什麼是創建一個PHP腳本,它將分析您的RSS提要,併發送推送通知到您的應用程序。並使用允許cron命令的服務器,以便可以連續運行此腳本並檢查更新。

<?php 

//set the time zone 
date_default_timezone_set('America/New_York'); 

//get xml file from dropbox event page 
$completeurl ='your xml url'; 

//equal badge to zero 
$badge=0; 

//format date and time 
$format = 'D, d M Y H:i:s O'; 

// Put your alert message here: 
$message; 


//parse the xml file 
$item = $xml->channel->item; 
for ($i = 0; $i < sizeof($item); $i++) { 

    $title = $item[$i]->title; 
    $description=$item[$i]->description; 
    $pubDate = $item[$i]->pubDate; 


    //search title for word 'edited' 
    if (strpos($title,'edited') !== false) { 
     echo "Edited word is found in title true \n"; 


     $inDate = DateTime::createFromFormat($format, $pubDate);//input date and time 
     $postDate = new DateTime();// current date and time 

     $diff = $inDate->diff($postDate); // difference current-input 

     // If the total number of days is > 0, or the number of hours > 0, or the number of minutes > 30, then its an invalid timestamp. 
     if($diff->format('%a') > 0 || $diff->format('%H') > 0 || $diff->format('%i') > 30) { 
      echo "update is not recent\n"; 
    }else{ 
     //if true increase badge by one 

     $badge = $badge + 1; 
    } 
} 



} 
//print total updates 
echo "Total Badge= " . $badge. "\n"; 


//if total updates is bigger or equal to one send notification 
if($badge>=1){ 
// Put your device token here (without spaces): 
$deviceToken = 'yourdevicetoken'; 

// Put your private key's passphrase here: 
$passphrase = 'yourpassphrase in your.cem file'; 


//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default', 
    'badge' => $badge 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 
}else 
    echo "There is no update available \n"; 


?>