1

현재 Android 용 Xamarin으로 모바일 애플리케이션을 작성 중이며 회사에서 Mac을 구매 한 후에 iOS를 추가 할 예정이므로 iOS 부분을 개발할 수 있습니다. 현재 Azure Notification Hub에 대한 .Net Mobile Services 백엔드를 작성하여 백엔드에서 장치를 등록 할 수있을뿐만 아니라 특정 사용자 및/또는 모든 사용자에게 푸시 알림을 보낼 수 있습니다.. 알림 센터 용 Net Mobile 서비스 백엔드

나는 Azure 문서를 모두 Getting Started With Notification Hub까지 따라 갔으며 단일 플랫폼 푸시를 성공적으로 수행했습니다. 그러나이 예를 넘어서 움직이는 것은 내가 붙어있는 곳이다. 이 시점을 넘어서는 모든 예는 Android 지원을 완전히 삭제하고 Windows Phone 및 iOS에만 초점을 맞 춥니 다. 이 주제에 관한 몇 가지 채널 9 비디오를 시청했으며 다시 Windows Phone, Windows 8 및 iOS 기반입니다.

누군가가 백엔드에서 알림 허브에 장치를 등록 할 Azure Notification Hub에 대한 .Net 모바일 서비스 백엔드의 예가 있습니까? 시간 내 주셔서 감사합니다.

답변

1

아직 GitHub에 샘플 코드가 없지만 Android에서 작동하는 NotificationHub의 요령은 여기에 있습니다.

using Microsoft.ServiceBus.Notifications; 
using Newtonsoft.Json; 

public class AndroidNotificationHub 
{ 
    private readonly NotificationHubClient _hubClient; 

    public AndroidNotificationHub() 
    { 
     const string cn = "YourConnectionStringHere"; 
     const string hubPath = "YourHubPathHere"; 
     _hubClient = NotificationHubClient.CreateClientFromConnectionString(cn, hubPath); 
    } 

    public async Task<RegistrationDescription> Register(string platform, string installationId, string registrationId, string userName) 
    { 
     // Get registrations for the current installation ID. 
     var regsForInstId = await _hubClient.GetRegistrationsByTagAsync(installationId, 100); 

     var updated = false; 
     var firstRegistration = true; 
     RegistrationDescription registration = null; 

     // Check for existing registrations. 
     foreach (var registrationDescription in regsForInstId) 
     { 
      if (firstRegistration) 
      { 
       // Update the tags. 
       registrationDescription.Tags = new HashSet<string>() { installationId, userName }; 

       // We need to handle each platform separately. 
       switch (platform) 
       { 
        case "android": 
         var gcmReg = registrationDescription as GcmRegistrationDescription; 
         gcmReg.GcmRegistrationId = registrationId; 
         registration = await _hubClient.UpdateRegistrationAsync(gcmReg); 
         break; 
       } 
       updated = true; 
       firstRegistration = false; 
      } 
      else 
      { 
       // We shouldn't have any extra registrations; delete if we do. 
       await _hubClient.DeleteRegistrationAsync(registrationDescription); 
      } 
     } 

     // Create a new registration. 
     if (!updated) 
     { 
      switch (platform) 
      { 
       case "android": 
        registration = await _hubClient.CreateGcmNativeRegistrationAsync(registrationId, new[] { installationId, userName }); 
        break; 
      } 
     } 

     return registration; 
    } 

    // Basic implementation that sends a notification to Android clients 
    public async Task<bool> SendNotification(int id, string from, string text, string tag) 
    { 
     try 
     { 
      var payload = new 
      { 
       data = new 
       { 
        message = new 
        { 
         // these properties can be whatever you want 
         id, 
         from, 
         text, 
         when = DateTime.UtcNow.ToString("s") + "Z" 
        } 
       } 
      }; 

      var json = JsonConvert.SerializeObject(payload); 

      await _hubClient.SendGcmNativeNotificationAsync(json, tag); 

      return true; 
     } 
     catch (ArgumentException ex) 
     { 
      // This is expected when an APNS registration doesn't exist. 
      return false; 
     } 
    } 

    public async Task<bool> ClearRegistrations(string userName) 
    { 
     // Get registrations for the current installation ID. 
     var regsForInstId = await _hubClient.GetRegistrationsByTagAsync(userName, 100); 

     // Check for existing registrations. 
     foreach (var registrationDescription in regsForInstId) 
     { 
      // We shouldn't have any extra registrations; delete if we do. 
      await _hubClient.DeleteRegistrationAsync(registrationDescription); 
     } 
     return true; 
    } 
} 

Android 클라이언트는 시작할 때 백엔드 등록 API를 호출해야합니다. 이에 대한 MVC 조치가 있습니다.

[HttpPost] 
public async Task<ActionResult> Register(string platform, string installationId, string registrationId, string userName) 
{ 
    try 
    { 
     var hub = new AndroidNotificationHub(); 
     var registration = await hub.Register(platform, installationId, registrationId, userName); 
     return Json(registration); 
    } 
    catch (Exception ex) 
    { 
     return Content(ex.ToString()); 
    } 
} 

모바일 클라이언트가 등록되면, 당신은 다음 SendNotification 메소드를 호출하여, 백엔드에서 알림을 보낼 시작할 수 있습니다.

희망 사항이 당신을 올바른 방향으로 안내합니다.

+0

안녕하세요 @ 킬리만, 우리가 등록 기능에 보낸 'installationId' 값의 종류 정보는 무엇입니까? – andrefadila

+0

이 문제를 겪는 다른 사람에게는 installationId가 단지 태그로 사용되는 앱 특정 값이므로 등록에 중요하지 않은 것으로 보입니다. – Jason