アップデート
シナリオは、 http ://www.windowsazure.com/en-us/manage/services/notification-hubs/notify-users-aspnet/ で完全に説明されています。
以下のソリューションは、Notification Hubs がプレビュー版ではなくなり、.NET SDK にいくつかの重大な変更があったため、機能しなくなりました。
古い答え
あなたが概説した解決策は正しいです。注意点は、アプリのバックエンドから登録管理を行う場合、現在登録されているトークンをどこかに保存する必要があることです (通常はデバイス アプリですが、バックエンドのインストール テーブルでも機能します)。
「古い」トークンをデバイスに保存すると仮定すると、次のロジックを実装する必要があります。
バックエンドで
「oldToken」、「newToken」の 2 つのパラメータを取るエンドポイント。これは基本的に、新しい登録を作成する (必要に応じてテンプレート/ネイティブまたはタグを変更する) か、現在の登録を更新します。
var hubClient = NotificationHubClient.CreateClientFromConnectionString(connectionString, "<notification hub name>");
if (hubClient.RegistrationExists("oldDeviceToken"))
{
hubClient.UpdateRegistrationsWithNewPnsHandle("oldDeviceToken", "newDeviceToken");
} else
{
hubClient.CreateAppleNativeRegistration("newDeviceToken", new string[] {"myTag"});
}
現在の登録を変更したり、タグを追加したり、テンプレートを変更したりするなど、より多くのシナリオが可能です。hubClient には、これらすべてのメソッドがあり、自明です。大まかな情報は、この記事の最後にあります。
デバイスアプリで
次のロジックを実装します。
- 古いトークンが保存されていない場合は、新しいトークン (backendEndpoint(newToken, newToken)) を使用してバックエンドに接続し、返されたときにトークンをローカルに保存します。
- 古いトークンがあり、新しいトークンとは異なる場合は、古いトークンと新しいトークン (backendEndpoint(oldToken, newToken)) を使用してバックエンドに接続し、呼び出しが完了して新しいトークンをローカルに保存します。
- 古いトークンがあり、新しいものと変わらないが、最後の登録が 30 日以上前に行われた場合は、古いトークン (backendEndpoint(oldToken, oldToken)) でバックエンドを呼び出します。
このシナリオのサンプルをできるだけ早く追加します。