GVNotifier 1.4.1.159
A quick update today to GVNotifier:
- Reduction in bandwidth usage. I’d really like to reduce this more, but I’m not finding what I need, even Google’s services don’t seem to have an API for message counts. The one API I have found is mostly useless since it only indicates new conversations, not new messages.
- Fix for logout on tray icon.
- Fix for Google Talk calling option.
I have some ideas for realtime call notifications, but it is too early to see if it’s possible.
Chrome to Windows Phone 7
I’ve just submitted my second app, Chrome to WP7 to the Windows Phone marketplace. The app has a very simple purpose, to give you the ability to quickly send links and selected text from within the Chrome browser, to your Windows Phone.
The Chrome extension may be downloaded here.
Chrome to WP7 is in the marketplace!
Chrome to WP7 works similarly to Chrome to Phone for Android. A push notification is sent to the phone, which will show up as a toast, and upon opening the app, a list of your most recent links and text are available, regardless of whether or not the push notification succeeded. From within the app, you may email the Title/URL/Text, or open the link.
Update! Now supporting Firefox, IE8/9, Safari and Opera.
Screenshots
Chrome to WP7 is free.
Send Push Notifications to Windows Phone 7 from PHP
I couldn’t find a library for sending Push Notifications to Windows Phone 7 from PHP. Most samples were using an ASP.NET web service. For those of us who would like to run Push Notifications from cheaper PHP and cURL enabled hosting, I’ve created a little helper class: (The XML may be break below, so here is the Text Version)
class WindowsPhonePushPriority { const TileImmediately = 1; const ToastImmediately = 2; const RawImmediately = 3; const TileWait450 = 11; const ToastWait450 = 12; const RawWait450 = 13; const TileWait900 = 21; const ToastWait900 = 22; const RawWait900 = 23; } class WindowsPhonePushClient { private $device_url = ''; private $debug_mode = false; function __construct($device_url) { $this->device_url = $device_url; } public function send_raw_update($msg, $priority = WindowsPhonePushPriority::RawImmediately) { return $this->_send_push(array('X-NotificationClass: ' . $priority), $msg); } public function send_tile_update($image_url, $count, $title, $priority = WindowsPhonePushPriority::TileImmediately) { $msg = "< ?xml version=\"1.0\" encoding=\"utf-8\"?>" . "<wp :Notification xmlns:wp=\"WPNotification\">" . "</wp><wp :Tile>". "</wp><wp :BackgroundImage>" . $image_url . "</wp>" . "<wp :Count>" . $count . "</wp>" . "<wp :Title>" . $title . "</wp>" . " " . ""; return $this->_send_push(array( 'X-WindowsPhone-Target: token', 'X-NotificationClass: ' . $priority, ), $msg); } private function send_toast($title, $message, $priority = WindowsPhonePushPriority::ToastImmediately) { $msg = "< ?xml version=\"1.0\" encoding=\"utf-8\"?>" . "<wp :Notification xmlns:wp=\"WPNotification\">" . "</wp><wp :Toast>" . "</wp><wp :Text1>" . $title . "</wp>" . "<wp :Text2>" . $message . "</wp>" . "" . ""; return $this->_send_push($url, array( 'X-WindowsPhone-Target: toast', 'X-NotificationClass: ' . $priority, ), $msg); } private function _send_push($headers, $msg) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->device_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, // Add these headers to all requests $headers + array( 'Content-Type: text/xml', 'Accept: application/*' ) ); curl_setopt($ch, CURLOPT_POSTFIELDS, $msg); if ($this->debug_mode) { curl_setopt($ch, CURLOPT_VERBOSE, $this->debug_mode); curl_setopt($ch, CURLOPT_STDERR, fopen('debug.log','w')); } $output = curl_exec($ch); curl_close($ch); return array( 'X-SubscriptionStatus' => $this->_get_header_value($output, 'X-SubscriptionStatus'), 'X-NotificationStatus' => $this->_get_header_value($output, 'X-NotificationStatus'), 'X-DeviceConnectionStatus' => $this->_get_header_value($output, 'X-DeviceConnectionStatus') ); } private function _get_header_value($content, $header) { return preg_match_all("/$header: (.*)/i", $content, $match) ? $match[1][0] : ""; } }
This code supports sending all three types of push notifications, Tile, Toast and Raw.
To use the class, simply include the file and call the constructor with the Device URL, which has already been uploaded to your server from the devices themselves.
Coming Soon: MediaRemote for Windows Phone
This app is still moving through the Windows Phone Marketplace approval process, so I’m adding this post as a placeholder.
MediaRemote has a simple purpose, it lets you control any generic media player running on your Windows XP/Vsita/7 computer, so long as the media player responds to the media keys (if your keyboard supports them). This includes Zune, Windows Media Player, iTunes, foobar2000 and more. Supported actions include: Play/Pause, Previous Track, Next Track, Volume Up/Down and Mute.
Download MediaRemote for Windows Phone (Windows Software)
Download MediaRemote for Windows Phone (Windows Phone 7 Software)




