私はVisual Studio(2015)内でAndroidモバイルエミュレータにデプロイするプロトタイプのXamarinフォームアプリケーションを正常に実装しました。 私はネイティブ通知サービスとしてGoogle Cloud Messagingを使用しています。アプリは、GCMからAzure Notification Hubに返信されたトークンの一度の登録を行います。Microsoft.Azure.MessagingNotificationHubコンストラクタへの引数は無視されますか?
これまでのところすべてうまくいきました。
しかし、クライアントのNotificationHubオブジェクト(Azure Messaging ComponentというXamarinコンポーネントを使用しています)を構築する私のAzure Notification Hubの名前に誤って不正な追加文字を導入しました。 Azureの通知ハブ
コンストラクタは3つの引数
- 通知ハブの名前を取り、接続文字列を聞く
- GCMClientハンドシェイクの一部としてOnRegisteredイベントに渡されたAndroidのコンテキストオブジェクト
エミュレータでアプリケーションを削除して新しく再デプロイすると、通知が成功したように見え、デバイスはnotifiを受信します最初のコンストラクタ引数に偽の通知ハブ名を付けると、カチオンです。この引数はデバッグに必要なフレンドリーな文字列ですか?私は間違った接続文字列によってコンストラクタと登録が失敗することを納得しました。
ここでは、通知の登録とその後の受信を処理するインテントサービスを使用した、私のOnRegisteredメソッドコードを示します。
protected override void OnRegistered(Context context, string registrationId)
{
Log.Verbose("PushHandlerBroadcastReceiver", "GCM Registered: " + registrationId);
RegistrationID = registrationId;
/** "NHub" is the hub name on Azure rather than bogus value of "NHub-"
In the real code I get this from Constants.HubName
but hardcoding here to highlight the issue of concern
**/
Hub = new NotificationHub("NHub-", Constants.ListenConnectionString, context);
try
{
Hub.UnregisterAll(registrationId);
}
catch (Exception ex)
{
Log.Error(MyBroadcastReceiver.TAG, ex.Message);
}
var tags = new List<string>() { };
try
{
string templateBodyGCM = "{\"data\":{\"message\":\"$(messageParam)\"}}";
var hubRegistration2 = Hub.RegisterTemplate(registrationId, "genericMessage", templateBodyGCM, tags.ToArray());
}
catch (Exception ex)
{
Log.Error(MyBroadcastReceiver.TAG, ex.Message);
}
}
NotificationHubオブジェクトのAPI呼び出しがちょうどなど、デバッグ/トレース用の不透明な文字列としてその最初の引数を使用し、その値は、そのようなアズールに通知ハブ取引を設定するには重要ではないということならば誰でも確認することができます通知の登録と受信として?
非常に有用な答え、特にRESTful APIに直接行くことで得られる効率についてのあなたのコメント。私の場合、モバイルアプリは、初めてアプリを起動したとき(またはアプリが端末から削除され、新たに再インストールされたとき)にGCMから戻ってくるトークン(登録ID)を登録しています。私は何が起こっているかを見るためにRESTful呼び出しを嗅ぐことができたと思いますが、NotificationHubで構築されたオブジェクトはこの登録ステップのための正確なハブ名を必要としません。 – retail3r