2016-10-26 15 views
0

私は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呼び出しがちょうどなど、デバッグ/トレース用の不透明な文字列としてその最初の引数を使用し、その値は、そのようなアズールに通知ハブ取引を設定するには重要ではないということならば誰でも確認することができます通知の登録と受信として?

  • 答えて

    0

    回答の詳細は、通知REST API内にあります。

    あなたのケースではXamarin.Azure.NotificationHubs.AndroidナゲットであるXamarin Azureコンポーネントのような、さまざまな "ヘルパー"パッケージ。これは、AndroidネイティブJava実装用のバインディングプロジェクトであり、AzureサービスバスREST APIを呼び出すだけです。だから、あなたが使用しているNotification Hub名前は重要であり、あなたはハブを削除、照会、作成している場合は、あなたのAzureのコンソールにあるものと一致しなければなりません

    https://{namespace}.servicebus.windows.net/{Notification Hub}?api-version=2015-01 
    

    :としてAzureの上

    これらのエンドポイントが定義されていますAND/を送信する場合は、ネイティブGCM/APNS/...通知をAzure通知ハブからアプリに送信してください。

    ネイティブのメッセージがは、Azureのは、それがデバイス上でメッセージを受信することになると、それがためだけのブローカーである絵ではないようNotification Hub名が使用されていないので、がGoogleのGCMやFirebaseを通過している受信開始正しいネイティブメッセージングサービスにメッセージを送信します。

    FYI:はい、最初の場所でREST APIを使用するだけで、特に最終的なアプリケーションサイズの方が効率的です。メモリ消費量とスループット速度も改善されていますが、これは送信されるメッセージの数に依存します...

    +0

    非常に有用な答え、特にRESTful APIに直接行くことで得られる効率についてのあなたのコメント。私の場合、モバイルアプリは、初めてアプリを起動したとき(またはアプリが端末から削除され、新たに再インストールされたとき)にGCMから戻ってくるトークン(登録ID)を登録しています。私は何が起こっているかを見るためにRESTful呼び出しを嗅ぐことができたと思いますが、NotificationHubで構築されたオブジェクトはこの登録ステップのための正確なハブ名を必要としません。 – retail3r

    関連する問題