标签 WindowsPhone 下的文章

离线升级到Tango

前提手机目前已是7720Mango版本,可按下面流程离线升级到Tango。

7720升级到7740,参考教程:
http://www.wpxap.com/thread-212638-1-1.html

7740升级到8107,参考教程:
http://www.wpxap.com/thread-259138-1-1.html

8107升级到8112,8112升级到8773,参考教程:
http://www.wpxap.com/thread-432749-1-1.html

PHP版的Windows Phone推送功能

经过几天的捣鼓,终于搞定了PHP版的Windows Phone推送功能(Toast通知)。

推送流程:
1.手机上部署XAP,然后获取到手机的通知管道URI。
2.通过通知管道URI向MPNS发送通知数据。
3.MPNS向手机推送通知。

推送流程

具体参考:http://msdn.microsoft.com/zh-cn/library/ff402558(v=vs.92)

推送成功效果图:
通知成功

PHP代码:

/**
*Windows Phone 7 Push Notification in php by Rudy HUYN
**/
final class WindowsPhonePushDelay
{

const Immediate=0;
const In450Sec=10;
const In900Sec=20;

private function __construct(){}
}

class WindowsPhonePushNotification
{
private $notif_url = '';

function WindowsPhonePushNotification($notif_url)
{
$this->notif_url = $notif_url;
}

/**
* Toast notifications are system-wide notifications that do not disrupt the user workflow or require intervention to resolve. They are displayed at the top of the screen for ten seconds before disappearing. If the toast notification is tapped, the application that sent the toast notification will launch. A toast notification can be dismissed with a flick.
* Two text elements of a toast notification can be updated:
* Title. A bolded string that displays immediately after the application icon.
* Sub-title. A non-bolded string that displays immediately after the Title.
*/
public function push_toast($title, $subtitle,$delay = WindowsPhonePushDelay::Immediate, $message_id=NULL)
{
$msg =    "" .
"" .
"" .
"".htmlspecialchars($title)."" .
"".htmlspecialchars($subtitle)."" .
"" .
"";

return $this->push('toast',$delay+2,$message_id, $msg);
}

/**
*A Tile displays in the Start screen if the end user has pinned it. Three elements of the Tile can be updated:
*@background_url : You can use a local resource or remote resource for the background image of a Tile.
*@title : The Title must fit a single line of text and should not be wider than the actual Tile. If this value is not set, the already-existing Title will display in the Tile.
*@count. an integer value from 1 to 99. If not set in the push notification or set to any other integer value, the current Count value will continue to display.
*/
public function push_tile($background_url, $title, $count, $delay = WindowsPhonePushDelay::Immediate,$message_id=NULL)
{
$msg =     "" .
"" .
"" .
"".htmlspecialchars($background_url)."" .
"$count" .
"".htmlspecialchars($title)."" .
"" .
"";

return $this->push('token',$delay+1, $message_id,$msg);
}

/**
* If you do not wish to update the Tile or send a toast notification, you can instead send raw information to your application using a raw notification. If your application is not currently running, the raw notification is discarded on the Microsoft Push Notification Service and is not delivered to the device. The payload of a raw notification has a maximum size of 1 KB.
*/
public function push_raw($data, $delay = WindowsPhonePushDelay::Immediate,$message_id=NULL)
{
return $this->push(NULL,$delay+3,$message_id, $data);
}

/**
*@target : type of notification
*@delay : immediate, in 450sec or in 900sec
*@message_id : The optional custom header X-MessageID uniquely identifies a notification message. If it is present, the same value is returned in the notification response. It must be a string that contains a UUID
*/
private function push($target,$delay,$message_id,$msg)
{

$sendedheaders=  array(
'Content-Type: text/xml',
'Accept: application/*',
"X-NotificationClass: $delay"
);
if($message_id!=NULL)
$sendedheaders[]="X-MessageID: $message_id";
if($target!=NULL)
$sendedheaders[]="X-WindowsPhone-Target:$target";

$req = curl_init();
curl_setopt($req, CURLOPT_HEADER, true);
curl_setopt($req, CURLOPT_HTTPHEADER,$sendedheaders);
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $msg);
curl_setopt($req, CURLOPT_URL, $this->notif_url);
curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($req);
curl_close($req);

$result=array();
foreach(explode("\n",$response) as $line)
{
$tab=explode(":",$line,2);
if(count($tab)==2)
$result[$tab[0]]=trim($tab[1]);
}
return $result;
}
}

代码来自:http://jpsolution.wordpress.com/tag/push-notification-for-windows-phone-7-in-php/
其他参考资料:http://www.daveamenta.com/2010-11/send-push-notifications-to-windows-phone-7-from-php/

Windows Phone通知类型分析

最近在做手机推送方面的工作,整理一下Windows Phone通知的相关资料。

Windows Phone支持的通知类型有三种:

Toast通知

Toast 通知显示在屏幕的顶部,用于通知用户某个事件,如新闻或天气警报。除非用户通过向右轻拂关闭通知,否则 Toast 将显示大约 10 秒钟。如果用户点按 Toast,则会启动发送该 Toast 通知的应用程序。
Toast通知

磁贴通知

磁贴通知可用于更新“开始”屏幕上的磁贴。磁贴为分为正反两面。
磁贴通知

RAW通知

可以使用 Raw 通知向您的应用程序发送信息。
如果您的应用程序当前未运行,则 Raw 通知会在 Microsoft 推送通知服务上丢弃并且不会发送到设备。

自定义的HTTP标头:

MessageID

与响应关联的通知消息 ID。
如果未将此标头添加到 POST 请求,则 Microsoft 推送通知服务会在响应中忽略此标头。

格式:X-MessageID:MessageIDValue
其中MessageIDValue类型为STRING。

NotificationClass

批处理间隔,指示推送通知将从推送通知服务发送到应用程序的时间。
如果此标头不存在,则推送通知服务会立即发送该消息。

格式:X-NotificationClass:NotificationClassValue
其中NotificationClassValue类型为DIGIT。

此标头可能的值:

Toast 通知
2 立即发送
12 在 450 秒内发送
22 在 900 秒内发送
磁贴 通知
1 立即发送
11 在 450 秒内发送
21 在 900 秒内发送
RAW 通知
3 立即发送
13 在 450 秒内发送
23 在 900 秒内发送
通知类型

要发送的推送通知的类型。
可能的选项为磁贴、Toast 和 Raw。
如果此标头不存在,则推送通知将被视为 Raw 通知。

格式:X-WindowsPhone-Target:NotificationTypeValue
其中NotificationTypeValue类型为STRING。

CallbackURI

当触发某个特定事件时将注册的回调消息发送到的通知通道 URI。
仅当在经过身份验证的 Web 服务中注册回调消息时才允许使用此自定义标头。

格式:X-CallbackURI:CallbackURIValue
其中CallbackURIValue类型为STRING。

推送内容格式:

Toast推送内容格式:
$msg =	"" .
				"" .
				"" .
				"$title" .
				"$message" .
				"" .
				"";

参数说明:
a)Text1标题。紧挨着应用程序图标之后显示的黑体字字符串。在 XML 架构中,该字符串定义为 Text1 属性。
b)Text2内容。紧挨着“标题”之后显示的非黑体字字符串。在 XML 架构中,该字符串定义为 Text2 属性。
c)Param参数。如果用户点按 Toast,则将参数值传递给您的应用程序,而不进行显示。该参数可以指示应用程序应该启动到的页面。该参数还包含传递到应用程序的名称-值对。在 XML 架构中,该字符串定义为 Param 属性。此参数只支持Windows Phone OS 7.1或更高版本的设备,若将具有此参数的通知发送到Windows Phone OS 7.0设备会导致错误,并且通道会被关闭。

可以显示的文本数量取决于在 Toast 消息中使用的字符以及“标题”(粗体)和“内容”(非粗体)的长度。如果只设置了一个“标题”,则可以显示大约 40 个字符,之后的字符将被截断。如果只设置了“内容”,则可以显示大约 47 个字符。如果一个 Toast 在“标题”和“内容”之间平均拆分,则可以显示大约 41 个字符。无法放在 Toast 上的任何文本都将被截断。

显示如图(Title对应Text1,Sub-title对应Text2)
Toast通知

磁贴推送内容格式:
$msg = 	"" .
				"" .
				"" .
				"$image_url" .
				"$count" .
				"$title" .
				"" .
				"";

参数说明:
1.正面磁贴

Title标题。指示应用程序标题的字符串。标题必须适合单行文本并且不应该比实际磁贴宽。标题中大约可以包含 15 个字符,多余部分将被截断。
BackgroundImage。显示在磁贴正面的图像。建议您在磁贴正面始终拥有背景图像。
Count计数(也称为徽章)。从 1 到 99 的整数值。如果未设置“计数”的值或者设置为 0,则不会在磁贴上显示圆形图像和值。

显示如图
正面磁贴

2.反面磁贴
以下参数只能推送到Windows Phone OS 7.1 或更高版本的设备,推送到Windows Phone OS 7.0版本的设备会导致错误,并且通道会被关闭.

BackTitle。显示在磁贴背面底部的字符串。BackTitle 必须适合单行文本并且不应该比实际磁贴宽。标题中大约可以包含 15 个字符,多余部分将被截断。
BackBackgroundImage。显示在磁贴背面的图像。
BackContent。显示在磁贴背面中心的字符串。磁贴中大约可以包含 40 个字符,多余部分将被截断。

显示如图
反面磁贴

RAW

直接将数据转换成二进制数据的字节数组,写入 HTTP Request Stream 即可。

iPhone推送内容分析见之前的文章iOS推送通知的格式说明

微信2.1来了~

WP7版的微信2.1来了,暂时还未上线市场,可以到微信官网(www.weixin.com)下载。

[gallery link="file"]