更新: プロットが濃くなります。チャネル名を変更したところ、突然動作するようになりました (つまり、Microsoft プッシュ通知サーバーから同じ HTTP 応答を取得しているため、プッシュ サービスに問題はありませんでした)。
しかし、私にとって、これは解決策ではありません。これをテストして、プッシュ通知が機能していないときに同じ応答を受け取っている場合、ユーザーがプッシュ通知を受け取っていることを知るにはどうすればよいですか?
[元の投稿]
Windows Phone 7 デバイスにプッシュ通知を送信しようとしていますが、答えが見つからない非常に大きな問題があります。C# コードから始めます。
次の C# コードを使用してプッシュ通知をセットアップします。
private HttpNotificationChannel channel;
private static string PUSH_CHANNEL = "MySpecialPushChannel";
private Uri PushUri = null;
private bool IsPushRegistered = false;
public void StartPushSubscription()
{
try
{
channel = HttpNotificationChannel.Find(PUSH_CHANNEL);
}
catch
{}
if (channel != null)
{
PushUri = channel.ChannelUri;
if (!channel.IsShellTileBound)
channel.BindToShellTile();
}
else
{
channel = new HttpNotificationChannel(PUSH_CHANNEL);
channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated);
channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(channel_HttpNotificationReceived);
channel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(channel_ErrorOccurred);
try
{
channel.Open();
channel.BindToShellTile();
}
catch (Exception err)
{
channel = null;
IsPushRegistered = false;
// Code to try again
}
}
}
void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
PushUri = e.ChannelUri;
IsPushRegistered = true;
}
私は標準の WP7 プッシュ構造に従っています:
- HttpNotificationChannel を見つけます (または新しいものを開始します)。
- プッシュ通知の URI を取得するイベント ハンドラを登録する
- チャンネルを開く
- タイルにバインド
- チャネル Uri を処理します (プッシュ通知を送信する幸せな日を待つためにサービスに送信します)。
わかりました...これまでのところとても良いです。エラーはありません。Uri を取得し、サービスに問題なく送信します。アプリをスタート画面にピン留めすると、サービスが Uri にプッシュ リクエストを送信します (右上隅にプッシュ カウント数が少し表示されるように、カウントだけを送信します)。次のように HTTP 200 ステータスを返します。
DeviceConnectionStatus => 接続済み
NotificationStatus => 受信済み
SubscriptionStatus => アクティブ
そして... 何もありません。アプリにプッシュ ステータスが表示されません。デバイス、エミュレーター、別のデバイス、複数のサーバーで試してみましたが、結果は常に同じです。機能しないという事実を除いて、すべてが機能しているように見えます。