2016-10-26 5 views
0

Visual Studio (2015) 내 Android 모바일 에뮬레이터에 배포 할 프로토 타입 Xamarin 양식 앱을 성공적으로 구현했습니다. Google Cloud Messaging을 기본 알림 서비스로 사용하고 있으며 GCM에서 Azure Notification Hub로 수신 한 토큰을 한 번 등록합니다.Microsoft.Azure.MessagingNotificationHub 생성자에 대한 인수가 무시됩니까?

지금까지 모두 정상적으로 작동했습니다.

그러나 일부 지점에서 Azure Messaging Hub의 이름에 실수로 클라이언트 NotificationHub 객체 (Azure Messaging Component라는 Xamarin 구성 요소 사용)를 구성하는 불량 추가 문자가 삽입되었습니다. 푸른 알림 허브

  • 에 정의 된

    생성자는 3 개 인자

    • 알림 허브 이름을 사용 연결 문자열들을
    • GCMClient 핸드 쉐이크의 일환으로 OnRegistered 이벤트에 전달 안드로이드 컨텍스트 객체

    에뮬레이터에서 응용 프로그램을 삭제하고 새 응용 프로그램을 다시 배포하면 알림이 성공한 것처럼 보이고 장치는 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 구성 요소와 같이 다양한 "도우미"패키지가 있는데, 귀하의 경우에는 Xamarin.Azure.NotificationHubs.Android Nuget입니다. 이는 차례대로 Azure Service Bus REST API를 호출하는 안드로이드 네이티브 Java 구현을위한 바인딩 프로젝트입니다. 그래서 사용하는 Notification Hub 이름이 중요하고 허브를 삭제, 쿼리, 만드는 경우 푸른 콘솔에 일치해야

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

    :로 푸른에

    그 엔드 포인트가 정의되어 있습니다 AND애저 알림 허브를 통해 네이티브 GCM/APNS/... 알림을 전송하는 경우 앱에서.

    네이티브 메시지 은이 장치에서 메시지를 수신에 관해서 푸른이 사진에없는 것처럼 Notification Hub 이름이 사용되지 않도록 구글의 GCM 또는 중포 기지를 통해가는 접수 시작, 그것은 단지 브로커입니다 올바른 네이티브 메시징 서비스로 메시징을 보냅니다.

    FYI : 네, 처음에는 REST API를 사용하는 것이 더 효율적입니다. 특히 최종 앱 크기가 더 효율적입니다. 메모리 소비 및 처리량 속도도 개선되었지만 전송되는 메시지 수에 따라 다릅니다 ...

    +0

    매우 유용한 답변, 특히 RESTful API로 직접 이동하여 얻을 수있는 효율성에 대한 귀하의 의견입니다. 제 경우에는 모바일 앱이 앱이 처음 시작될 때 (또는 앱에서 기기를 삭제하고 새로 재설치 한 경우) GCM에서 되돌아 오는 토큰 (registrationid)을 등록합니다. 내가 무슨 일이 일어나고 있는지 볼 수있는 RESTful 호출을 냄새를 맡을 수 있지만 NotificationHub 생성 된 개체가이 등록 단계에 대한 정확한 허브 이름을 필요로하지 않는 것으로 나에게 나타납니다. – retail3r

    관련 문제