0

I am developing an ios app that uses Dropbox SDK. I want to notify user when any of the files in Dropbox is edited. I dont know If Dropbox provides any API's but I am thinking Apple's push notification would be nice. According to my research there is something like /delta in Dropbox SDK but there is not enough resource or example codes out internet to understand /delta.

What I want is:

Dropbox files changes----> My server detects what is changed and sends to apple-----> Apple push notification service send notification--------> IOS device receive notification

So Currently I completed push notification part of my application, I can send a simple notification to my app with via local apache server and php script. Device receives notification.

My question is how can I achieve

This part Dropbox files changes----> My server detects what is changed and sends to apple----->

I do not know how to parse rss feed of my dropbox folder. What language Should I use to parse data on dropbox? Should I continuously poll and check if any of the files is edited? or Is there a way that dropbox send a notification directly to my server or to apple notification server so I wont need to poll for changes all the time?

Thanks in Advance

4

1 に答える 1

0

what you would want to is to create a php script that will parse your rss feed and send the push notification to your app. And use a server that allows cron commands so you can continously run this script and check for updates.

<?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";


?>
于 2012-09-19T15:22:39.740 に答える