Azure 모바일 앱에서 푸시 알림 보내기Sending Push Notifications from Azure Mobile Apps

샘플 다운로드 샘플 다운로드Download Sample Download the sample

Azure Notification Hubs 다양 한 플랫폼 알림 시스템을 사용 하 여 통신할 수 있는 백 엔드의 복잡성을 제거 하는 동안 모든 모바일 플랫폼에 모든 백 엔드에서 모바일 푸시 알림을 보내기 위한 확장 가능한 푸시 인프라를 제공 합니다. 이 문서에서는 Xamarin.Forms 응용 프로그램에 Azure Mobile Apps에서 푸시 알림을 보내는 Azure Notification Hubs를 사용 하는 방법에 설명 합니다.Azure Notification Hubs provide a scalable push infrastructure for sending mobile push notifications from any backend to any mobile platform, while eliminating the complexity of a backend having to communicate with different platform notification systems. This article explains how to use Azure Notification Hubs to send push notifications from an Azure Mobile Apps instance to a Xamarin.Forms application.

Azure 알림 허브 푸시 및 Xamarin.Forms 비디오Azure Push Notification Hub and Xamarin.Forms video

푸시 알림은 응용 프로그램 계약 및 사용량을 높이기 위해 백 엔드 시스템에서 모바일 장치의 응용 프로그램으로 메시지와 같은 정보를 전송하는 데 사용됩니다.A push notification is used to deliver information, such as a message, from a backend system to an application on a mobile device to increase application engagement and usage. 알림은 사용자가 알림을 사용하는 대상 응용 프로그램을 활성화 하지 않은 경우에도 언제든지 보낼 수 있습니다.The notification can be sent at anytime, even when the user is not actively using the targeted application.

다음 다이어그램에 나와 있는 것 처럼 모바일 장치를 통해 플랫폼 알림 시스템 (PNS), 푸시 알림을 보내는 백 엔드 시스템:Backend systems send push notifications to mobile devices through Platform Notification Systems (PNS), as shown in the following diagram:

푸시 알림을 보내도록 백 엔드 시스템 클라이언트 응용 프로그램 인스턴스에 알림을 보내려면 플랫폼별 PNS에 연결 합니다.To send a push notification, the backend system contacts the platform-specific PNS to send a notification to a client application instance. 이 상당히 복잡해 집니다 백 엔드의 플랫폼 간 푸시 알림, 필요한 경우 백 엔드는 각 플랫폼별 PNS API 및 프로토콜에 사용 해야 하므로.This significantly increases the complexity of the backend when cross-platform push notifications are required, because the backend must use each platform-specific PNS API and protocol.

Azure Notification Hubs이 복잡성을 줄이는이 다른 플랫폼 알림 시스템의 세부 정보를 추상화 하 여 다음 다이어그램에 나와 있는 것 처럼 단일 API 호출을 통해 보낼 플랫폼 간 알림을 허용 합니다.Azure Notification Hubs eliminate this complexity by abstracting the details of the different platform notification systems, allowing a cross-platform notification to be sent with a single API call, as shown in the following diagram:

푸시 알림을 보내도록 백 엔드 시스템만 연락처 Azure 알림 허브는 다양 한 플랫폼 알림 시스템을 사용 하 여 다시 통신, 백 엔드의 복잡성 감소는 보냅니다 푸시 알림 코드입니다.To send a push notification, the backend system only contacts the Azure Notification Hub, which in turn communicates with the different platform notification systems, therefore decreasing the complexity of the backend code that sends push notifications.

Azure Mobile Apps는 notification hubs를 사용 하 여 푸시 알림에 대 한 기본 제공 지원 합니다.Azure Mobile Apps have built-in support for push notifications using notification hubs. Azure Mobile Apps 인스턴스 Xamarin.Forms 응용 프로그램에서 푸시 알림을 보내기 위한 프로세스는 다음과 같습니다.The process for sending a push notification from an Azure Mobile Apps instance to a Xamarin.Forms application is as follows:

  1. PNS 핸들을 반환 하는 Xamarin.Forms 응용 프로그램에 등록 합니다.The Xamarin.Forms application registers with the PNS, which returns a handle.
  2. Azure Mobile Apps 인스턴스 알림을 보냅니다 해당 Azure 알림 허브에 장치를 대상으로 지정할 핸들을 지정 하 합니다.The Azure Mobile Apps instance sends a notification to its Azure Notification Hub, specifying the handle of the device to be targeted.
  3. Azure 알림 허브에 장치에 대 한 적절 한 PNS로 알림을 보냅니다.The Azure Notification Hub sends the notification to the appropriate PNS for the device.
  4. PNS는 지정 된 장치는 알림을 보냅니다.The PNS sends the notification to the specified device.
  5. Xamarin.Forms 응용 프로그램 알림을 처리 하 고 표시 합니다.The Xamarin.Forms application processes the notification and displays it.

샘플 응용 프로그램 데이터가 Azure Mobile Apps 인스턴스에 저장 된 할 일 목록 응용 프로그램을 보여 줍니다.The sample application demonstrates a todo list application whose data is stored in an Azure Mobile Apps instance. 새 항목은 Azure Mobile Apps 인스턴스를에 추가 될 때마다 Xamarin.Forms 응용 프로그램에는 푸시 알림이 전송 됩니다.Every time a new item is added to the Azure Mobile Apps instance, a push notification is sent to the Xamarin.Forms application. 다음 스크린샷은 받은 푸시 알림을 표시 하는 각 플랫폼을 보여 줍니다.The following screenshots show each platform displaying the received push notification:

Azure Notification Hubs에 대 한 자세한 내용은 참조 하세요. Azure Notification Hubs 하 고 Xamarin.Forms 앱에 푸시 알림 추가합니다.For more information about Azure Notification Hubs, see Azure Notification Hubs and Add push notifications to your Xamarin.Forms app.

Azure 및 플랫폼 알림 시스템 설정Azure and Platform Notification System Setup

Azure Mobile Apps 인스턴스는 Azure 알림 허브를 통합 하는 프로세스는 다음과 같습니다.The process for integrating an Azure Notification Hub into an Azure Mobile Apps instance is as follows:

  1. Azure Mobile Apps 인스턴스를 만듭니다.Create an Azure Mobile Apps instance. 자세한 내용은 Azure 모바일 앱 사용합니다.For more information, see Consuming an Azure Mobile App.
  2. 알림 허브를 구성 합니다.Configure a notification hub. 자세한 내용은 알림 허브 구성합니다.For more information, see Configure a notification hub.
  3. 푸시 알림을 보내도록 Azure Mobile Apps 인스턴스를 업데이트 합니다.Update the Azure Mobile Apps instance to send push notifications. 자세한 내용은 푸시 알림을 전송 하도록 서버 프로젝트 업데이트합니다.For more information, see Update the server project to send push notifications.
  4. 각 PNS를 등록 합니다.Register with each PNS.
  5. 각 PNS와 통신 하는 알림 허브를 구성 합니다.Configure the notification hub to communicate with each PNS.

다음 섹션에서는 각 플랫폼에 대 한 추가 설치 지침을 제공 합니다.The following sections provide additional setup instructions for each platform.

iOSiOS

다음 단계를 추가로 푸시 알림 서비스 (APNS (Apple)는 Azure 알림 허브에서 사용 하려면 수행 해야 합니다.The following additional steps must be carried out to use Apple Push Notification Service (APNS) from an Azure Notification Hub:

  1. Keychain Access 도구를 사용 하 여 푸시 인증서에 대 한 요청을 서명 인증서를 생성 합니다.Generate a certificate signing request for the push certificate with the Keychain Access tool. 자세한 내용은 푸시 인증서에 대 한 인증서 서명 요청 파일 생성 Azure 설명서 센터에 있습니다.For more information, see Generate the Certificate Signing Request file for the push certificate on the Azure Documentation Center.
  2. Apple Developer Center에서 푸시 알림 지원을 위해 Xamarin.Forms 응용 프로그램을 등록 합니다.Register the Xamarin.Forms application for push notification support on the Apple Developer Center. 자세한 내용은 푸시 알림을 위해 앱 등록 Azure 설명서 센터에 있습니다.For more information, see Register your app for push notifications on the Azure Documentation Center.
  3. Apple Developer Center에서 푸시 알림을 사용 하도록 설정된 용 프로비저닝 프로필을 Xamarin.Forms 응용 프로그램을 만듭니다.Create a push notifications enabled provisioning profile for the Xamarin.Forms application on the Apple Developer Center. 자세한 내용은 참조 하세요. 앱에 대 한 프로 비전 프로필을 만드는 Azure 설명서 센터에 있습니다.For more information, see Create a provisioning profile for the app on the Azure Documentation Center.
  4. APNS와 통신 하는 알림 허브를 구성 합니다.Configure the notification hub to communicate with APNS. 자세한 내용은 APNS에 대 한 알림 허브 구성합니다.For more information, see Configure the notification hub for APNS.
  5. 새 앱 ID 및 프로 비전 프로필을 사용 하 여 Xamarin.Forms 응용 프로그램을 구성 합니다.Configure the Xamarin.Forms application to use the new App ID and provisioning profile. 자세한 내용은 Xamarin Studio에서 iOS 프로젝트를 구성 또는 Visual Studio에서 iOS 프로젝트 구성 Azure 설명서 센터에 있습니다.For more information, see Configuring the iOS project in Xamarin Studio or Configuring the iOS project in Visual Studio on the Azure Documentation Center.

AndroidAndroid

다음 단계를 추가로 FCM Firebase Cloud Messaging ()는 Azure 알림 허브에서 사용 하려면 수행 해야 합니다.The following additional steps must be carried out to use Firebase Cloud Messaging (FCM) from an Azure Notification Hub:

  1. FCM 등록 합니다.Register for FCM. 서버 API 키를 클라이언트 ID와 함께 자동으로 생성 되 고에서 압축을 google-services.json 다운로드 되는 파일입니다.A Server API key and a Client ID are automatically generated, and packed in a google-services.json file that is downloaded. 자세한 내용은 사용 FCM Firebase Cloud Messaging ()합니다.For more information, see Enable Firebase Cloud Messaging (FCM).
  2. FCM을 사용 하 여 통신 하도록 알림 허브를 구성 합니다.Configure the notification hub to communicate with FCM. 자세한 내용은 Mobile Apps를 백 엔드 FCM을 사용 하 여 푸시 요청을 전송에 구성합니다.For more information, see Configure the Mobile Apps back end to send push requests by using FCM.

유니버설 Windows 플랫폼Universal Windows Platform

다음 단계를 추가로 Azure 알림 허브에서 Windows 알림 서비스 (WNS)를 사용 하려면 수행 해야 합니다.The following additional steps must be carried out to use the Windows Notification Service (WNS) from an Azure Notification Hub:

  1. Windows 알림 서비스 (WNS)를 등록 합니다.Register for the Windows Notification Service (WNS). 자세한 내용은 WNS를 사용 하 여 푸시 알림에 Windows 앱을 등록 Azure 설명서 센터에 있습니다.For more information, see Register your Windows app for push notifications with WNS on the Azure Documentation Center.
  2. WNS와 통신 하는 알림 허브를 구성 합니다.Configure the notification hub to communicate with WNS. 자세한 내용은 wns 알림 허브 구성 Azure 설명서 센터에 있습니다.For more information, see Configure the notification hub for WNS on the Azure Documentation Center.

Xamarin.Forms 응용 프로그램에 푸시 알림 지원을 추가Adding Push Notification Support to the Xamarin.Forms Application

다음 섹션에서는 각 플랫폼별 프로젝트에 푸시 알림을 지원 하기 위해 필요한 구현을 설명 합니다.The following sections discuss the implementation required in each platform-specific project to support push notifications.

iOSiOS

IOS 응용 프로그램에서 푸시 알림 지원을 구현 하기 위한 프로세스는 다음과 같습니다.The process for implementing push notification support in an iOS application is as follows:

  1. 사용 하 여 푸시 알림 서비스 (APNS (Apple)에 등록 된 AppDelegate.FinishedLaunching 메서드.Register with the Apple Push Notification Service (APNS) in the AppDelegate.FinishedLaunching method. 자세한 내용은 Apple 푸시 알림 시스템을 사용 하 여 등록합니다.For more information, see Registering with the Apple Push Notification System.
  2. 구현 된 AppDelegate.RegisteredForRemoteNotifications 등록 응답을 처리 하는 방법입니다.Implement the AppDelegate.RegisteredForRemoteNotifications method to handle the registration response. 자세한 내용은 등록 응답 처리합니다.For more information, see Handling the Registration Response.
  3. 구현 된 AppDelegate.DidReceiveRemoteNotification 들어오는 푸시 알림을 처리 하는 방법입니다.Implement the AppDelegate.DidReceiveRemoteNotification method to process incoming push notifications. 자세한 내용은 들어오는 푸시 알림을 처리합니다.For more information, see Processing Incoming Push Notifications.

Apple Push Notification Service를 사용 하 여 등록Registering with the Apple Push Notification Service

IOS 응용 프로그램에 푸시 알림을 받을 수를 사용 하 여 푸시 알림 서비스 (APNS (Apple), 고유한 장치 토큰을 생성 하 고 응용 프로그램에 반환할 해당 등록 해야 합니다.Before an iOS application can receive push notifications, it must register with the Apple Push Notification Service (APNS), which will generate a unique device token and return it to the application. 등록에서 호출 되는 FinishedLaunching 의 재정의 AppDelegate 클래스:Registration is invoked in the FinishedLaunching override in the AppDelegate class:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    ...
    var settings = UIUserNotificationSettings.GetSettingsForTypes(
        UIUserNotificationType.Alert, new NSSet());

    UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications();
    ...
}

APNS를 사용 하 여 iOS 응용 프로그램을 등록 하는 경우 푸시 알림 수신 하려는의 형식을 지정 해야 합니다.When an iOS application registers with APNS it must specify the types of push notifications it would like to receive. RegisterUserNotificationSettings 메서드를 등록 응용 프로그램을 받을 수 있습니다, 알림의 형식에 사용 하 여는 RegisterForRemoteNotifications APNS에서 푸시 알림을 받도록 등록 하는 메서드.The RegisterUserNotificationSettings method registers the types of notifications the application can receive, with the RegisterForRemoteNotifications method registering to receive push notifications from APNS.

참고

호출 하지 못하면는 RegisterUserNotificationSettings 메서드 응용 프로그램에서 자동으로 수신 되는 푸시 알림을 생성 합니다.Failing to call the RegisterUserNotificationSettings method will result in push notifications being silently received by the application.

등록 응답 처리Handling the Registration Response

APNS 등록 요청을 백그라운드에서 발생합니다.The APNS registration request occurs in the background. IOS를 호출 하는 응답을 받으면 합니다 RegisteredForRemoteNotifications 의 재정의 AppDelegate 클래스:When the response is received, iOS will call the RegisteredForRemoteNotifications override in the AppDelegate class:

public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
    const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";

    JObject templates = new JObject();
    templates["genericMessage"] = new JObject
    {
        {"body", templateBodyAPNS}
    };

    // Register for push with the Azure mobile app
    Push push = TodoItemManager.DefaultManager.CurrentClient.GetPush();
    push.RegisterAsync(deviceToken, templates);
}

이 메서드를 JSON으로 간단한 알림 메시지 템플릿을 만들고 알림 허브에서 템플릿 알림을 수신 하도록 장치를 등록 합니다.This method creates a simple notification message template as JSON, and registers the device to receive template notifications from the notification hub.

참고

FailedToRegisterForRemoteNotifications 재정의 네트워크 연결이 없는 상황을 처리 하기 위해 구현 해야 합니다.The FailedToRegisterForRemoteNotifications override should be implemented to handle situations such as no network connection. 사용자가 하는 동안 응용 프로그램을 시작할 수 있으므로이 중요 한 오프 라인입니다.This is important because users might start the application while offline.

들어오는 푸시 알림을 처리합니다.Processing Incoming Push Notifications

DidReceiveRemoteNotification 의 재정의 AppDelegate 클래스는 응용 프로그램이 실행 되 고 알림의 받을 때 호출 되는 경우 들어오는 푸시 알림을 처리 하는 데 사용 됩니다.The DidReceiveRemoteNotification override in the AppDelegate class is used to process incoming push notifications when the application is running, and is invoked when a notification is received:

public override void DidReceiveRemoteNotification(
    UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
    NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;

    string alert = string.Empty;
    if (aps.ContainsKey(new NSString("alert")))
        alert = (aps[new NSString("alert")] as NSString).ToString();

    // Show alert
    if (!string.IsNullOrEmpty(alert))
    {
      var notificationAlert = UIAlertController.Create("Notification", alert, UIAlertControllerStyle.Alert);
      notificationAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, null));
      UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(notificationAlert, true, null);
    }
}

userInfo 사전에 포함 되어 합니다 aps 값인 키를 alert 나머지 알림 데이터를 사용 하 여 사전입니다.The userInfo dictionary contains the aps key, whose value is the alert dictionary with the remaining notification data. 이 사전 검색은 사용 하 여는 string 대화 상자에 표시 되는 알림 메시지입니다.This dictionary is retrieved, with the string notification message being displayed in a dialog box.

참고

응용 프로그램 실행 중이 아닌 푸시 알림이 도착 했음을 응용 프로그램 시작 됩니다 있지만 DidReceiveRemoteNotification 메서드는 알림을 처리 하지 않습니다.If an application isn't running when a push notification arrives, the application will be launched but the DidReceiveRemoteNotification method won't process the notification. 대신, 알림 페이로드를 가져오고에서 적절 하 게 응답 합니다 WillFinishLaunching 또는 FinishedLaunching 재정의 합니다.Instead, get the notification payload and respond appropriately from the WillFinishLaunching or FinishedLaunching overrides.

APNS에 대 한 자세한 내용은 참조 하세요. iOS에 푸시 알림합니다.For more information about APNS, see Push Notifications in iOS.

AndroidAndroid

Android 응용 프로그램에서 푸시 알림 지원을 구현 하기 위한 프로세스는 다음과 같습니다.The process for implementing push notification support in an Android application is as follows:

  1. 추가 된 Xamarin.Firebase.Messaging NuGet Android 프로젝트에 패키지 및 응용 프로그램의 대상 버전을 Android 7.0 이상으로 설정 합니다.Add the Xamarin.Firebase.Messaging NuGet package to the Android project, and set the application's target version to Android 7.0 or higher.
  2. 추가 된 google-services.json Firebase 콘솔에서 Android 프로젝트의 루트에 다운로드 하 고 해당 빌드 작업을 설정 파일을 GoogleServicesJson합니다.Add the google-services.json file, downloaded from the Firebase console, to the root of the Android project and set its build action to GoogleServicesJson. 자세한 내용은 Google Services JSON 파일을 추가합니다.For more information, see Add the Google Services JSON File.
  3. Android 매니페스트에서 수신기를 선언 하 여 등록 Firebase 클라우드 메시징 (FCM) 사용 하 여 파일 및 구현 하는 FirebaseRegistrationService.OnTokenRefresh 메서드.Register with Firebase Cloud Messaging (FCM) by declaring a receiver in the Android manifest file, and by implementing the FirebaseRegistrationService.OnTokenRefresh method. 자세한 내용은 Firebase Cloud Messaging 등록합니다.For more information, see Registering with Firebase Cloud Messaging.
  4. Azure 알림 허브에 등록 된 AzureNotificationHubService.RegisterAsync 메서드.Register with the Azure Notification Hub in the AzureNotificationHubService.RegisterAsync method. 자세한 내용은 Azure 알림 허브 등록합니다.For more information, see Registering with the Azure Notification Hub.
  5. 구현 된 FirebaseNotificationService.OnMessageReceived 들어오는 푸시 알림을 처리 하는 방법입니다.Implement the FirebaseNotificationService.OnMessageReceived method to process incoming push notifications. 자세한 내용은 푸시 알림의 콘텐츠 표시합니다.For more information, see Displaying the Contents of a Push Notification.

Firebase Cloud Messaging에 대 한 자세한 내용은 참조 하십시오 Firebase Cloud Messaging 하 고 Firebase Cloud Messaging과 Remote Notifications합니다.For more information about Firebase Cloud Messaging, see Firebase Cloud Messaging and Remote Notifications with Firebase Cloud Messaging.

등록 Firebase Cloud MessagingRegistering with Firebase Cloud Messaging

Android 응용 프로그램에 푸시 알림을 받을 수 있습니다, 전에는 FCM 등록 토큰을 생성 하 고 응용 프로그램에 반환 된 등록 해야 합니다.Before an Android application can receive push notifications, it must register with FCM, which will generate a registration token and return it to the application. 등록 토큰에 대 한 자세한 내용은 참조 하세요. FCM 사용 하 여 등록합니다.For more information about registration tokens, see Registration with FCM.

이 방법으로 이루어집니다.This is accomplished by:

Android 매니페스트에서 수신기를 선언합니다.Declaring the Receiver in the Android Manifest

편집할 AndroidManifest.xml 하 고 다음을 삽입 <receiver> 요소를 <application> 요소:Edit AndroidManifest.xml and insert the following <receiver> elements into the <application> element:

<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
  <intent-filter>
    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    <category android:name="${applicationId}" />
  </intent-filter>
</receiver>

이 XML은 다음 작업을 수행합니다.This XML performs the following operations:

  • 내부 선언 FirebaseInstanceIdInternalReceiver 서비스를 안전 하 게 시작 하는 데 사용 되는 구현 합니다.Declares an internal FirebaseInstanceIdInternalReceiver implementation that is used to start services securely.
  • 선언 된 FirebaseInstanceIdReceiver 각 앱 인스턴스에 대 한 고유 식별자를 제공 하는 구현 합니다.Declares a FirebaseInstanceIdReceiver implementation that provides a unique identifier for each app instance. 또한이 수신자 인증 하 고 작업에 권한을 부여 합니다.This receiver also authenticates and authorizes actions.

FirebaseInstanceIdReceiver 받습니다 FirebaseInstanceId 하 고 FirebaseMessaging 이벤트에서 파생 된 클래스에 전달 하는 역할 FirebasesInstanceIdService.The FirebaseInstanceIdReceiver receives FirebaseInstanceId and FirebaseMessaging events and delivers them to the class that's derived from FirebasesInstanceIdService.

Firebase 인스턴스 ID 서비스를 구현합니다.Implementing the Firebase Instance ID Service

클래스를 파생 시켜 이루어집니다 FCM을 사용 하 여 응용 프로그램을 등록 합니다 FirebaseInstanceIdService 클래스입니다.Registering the application with FCM is achieved by deriving a class from the FirebaseInstanceIdService class. 이 클래스는 FCM에 액세스 하는 클라이언트 응용 프로그램을 인증 하는 보안 토큰을 생성 하는 일을 담당 합니다.This class is responsible for generating security tokens that authorize the client application to access FCM. 샘플 응용 프로그램에서을 FirebaseRegistrationService 클래스에서 파생 되는 FirebaseInstanceIdService 클래스 하 고 다음 코드 예제에 표시 됩니다:In the sample application the FirebaseRegistrationService class derives from the FirebaseInstanceIdService class and is shown in the following code example:

[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class FirebaseRegistrationService : FirebaseInstanceIdService
{
    const string TAG = "FirebaseRegistrationService";

    public override void OnTokenRefresh()
    {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        Log.Debug(TAG, "Refreshed token: " + refreshedToken);
        SendRegistrationTokenToAzureNotificationHub(refreshedToken);
    }

    void SendRegistrationTokenToAzureNotificationHub(string token)
    {
        // Update notification hub registration
        Task.Run(async () =>
        {
            await AzureNotificationHubService.RegisterAsync(TodoItemManager.DefaultManager.CurrentClient.GetPush(), token);
        });
    }
}

OnTokenRefresh 응용 프로그램에서 FCM 등록 토큰을 수신 하는 경우 메서드가 호출 됩니다.The OnTokenRefresh method is invoked when the application receives a registration token from FCM. 토큰을 검색 하는 메서드는 FirebaseInstanceId.Instance.Token FCM에서 비동기적으로 업데이트 되는 속성입니다.The method retrieves the token from the FirebaseInstanceId.Instance.Token property, which is asynchronously updated by FCM. OnTokenRefresh 메서드가 자주 호출 되 면 토큰은 응용 프로그램을 설치 하거나 제거, 사용자 응용 프로그램의 인스턴스 ID를 지울 때 응용 프로그램 데이터를 삭제 하는 경우에 업데이트 되므로 또는 토큰의 보안 된 경우 손상 됩니다.The OnTokenRefresh method is infrequently invoked, because the token is only updated when the application is installed or uninstalled, when the user deletes application data, when the application erases the Instance ID, or when the security of the token has been compromised. 또한 FCM 인스턴스 ID 서비스를 사용 하는 응용 프로그램 토큰 새로 고침의 정기적으로, 일반적으로 6 개월 마다 요청 합니다.In addition, the FCM Instance ID service will request that the application refreshes its token periodically, typically every 6 months.

합니다 OnTokenRefresh 메서드는 호출을 SendRegistrationTokenToAzureNotificationHub Azure 알림 허브를 사용 하 여 사용자의 등록 토큰을 연결 하는 데 사용 되는 메서드.The OnTokenRefresh method also invokes the SendRegistrationTokenToAzureNotificationHub method, which is used to associate the user's registration token with the Azure Notification Hub.

Azure 알림 허브 등록Registering with the Azure Notification Hub

합니다 AzureNotificationHubService 클래스를 제공 합니다 RegisterAsync Azure 알림 허브를 사용 하 여 사용자의 등록 토큰을 연결 하는 메서드.The AzureNotificationHubService class provides the RegisterAsync method, which associates the user's registration token with the Azure Notification Hub. 다음 코드 예제는 RegisterAsync 메서드를 호출한는 FirebaseRegistrationService 사용자의 등록 토큰 변경 될 때 클래스:The following code example shows the RegisterAsync method, which is invoked by the FirebaseRegistrationService class when the user's registration token changes:

public class AzureNotificationHubService
{
    const string TAG = "AzureNotificationHubService";

    public static async Task RegisterAsync(Push push, string token)
    {
        try
        {
            const string templateBody = "{\"data\":{\"message\":\"$(messageParam)\"}}";
            JObject templates = new JObject();
            templates["genericMessage"] = new JObject
            {
                {"body", templateBody}
            };

            await push.RegisterAsync(token, templates);
            Log.Info("Push Installation Id: ", push.InstallationId.ToString());
        }
        catch (Exception ex)
        {
            Log.Error(TAG, "Could not register with Notification Hub: " + ex.Message);
        }
    }
}

이 메서드는 JSON 및 레지스터 Firebase 등록 토큰을 사용 하 여 알림 허브에서 템플릿 알림을 수신 하는 간단한 알림 메시지 템플릿을 만듭니다.This method creates a simple notification message template as JSON, and registers to receive template notifications from the notification hub, using the Firebase registration token. 이렇게 하면 Azure 알림 허브에서 보낸 알림은 등록 토큰이 나타내는 장치는 대상입니다.This ensures that any notifications sent from the Azure Notification Hub will target the device represented by the registration token.

푸시 알림의 콘텐츠 표시Displaying the Contents of a Push Notification

클래스를 파생 시켜 이루어집니다 푸시 알림의 콘텐츠 표시는 FirebaseMessagingService 클래스입니다.Displaying the contents of a push notification is achieved by deriving a class from the FirebaseMessagingService class. 이 클래스는 재정의 가능한 포함 OnMessageReceived 응용 프로그램이 포그라운드에서 실행 되 고 있는지 응용 프로그램이 FCM에서 알림의 받을 때 호출 되는 메서드를 제공 합니다.This class includes the overridable OnMessageReceived method, which is invoked when the application receives a notification from FCM, provided that the application is running in the foreground. 샘플 응용 프로그램에서을 FirebaseNotificationService 클래스에서 파생 되는 FirebaseMessagingService 클래스 하 고 다음 코드 예제에 표시 됩니다:In the sample application the FirebaseNotificationService class derives from the FirebaseMessagingService class, and is shown in the following code example:

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class FirebaseNotificationService : FirebaseMessagingService
{
    const string TAG = "FirebaseNotificationService";

    public override void OnMessageReceived(RemoteMessage message)
    {
        Log.Debug(TAG, "From: " + message.From);

        // Pull message body out of the template
        var messageBody = message.Data["message"];
        if (string.IsNullOrWhiteSpace(messageBody))
            return;

        Log.Debug(TAG, "Notification message body: " + messageBody);
        SendNotification(messageBody);
    }

    void SendNotification(string messageBody)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

        var notificationBuilder = new NotificationCompat.Builder(this)
            .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
            .SetContentTitle("New Todo Item")
            .SetContentText(messageBody)
            .SetContentIntent(pendingIntent)
            .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
            .SetAutoCancel(true);

        var notificationManager = NotificationManager.FromContext(this);
        notificationManager.Notify(0, notificationBuilder.Build());
    }
}

응용 프로그램이 FCM에서 알림의 받을 때 합니다 OnMessageReceived 메서드는 메시지 콘텐츠를 추출 하 고 호출 된 SendNotification 메서드.When the application receives a notification from FCM, the OnMessageReceived method extracts the message content, and calls the SendNotification method. 이 메서드는 메시지 콘텐츠를 알림 영역에 표시 되는 알림과 사용 하 여 응용 프로그램이 실행 되는 동안 실행 되는 로컬 알림으로 변환 합니다.This method converts the message content into a local notification that's launched while the application is running, with the notification appearing in the notification area.

알림 의도 처리합니다.Handling Notification Intents

사용자가 알림을 누르면 알림 메시지를 함께 제공 되는 모든 데이터에 사용할 수는 Intent extras 합니다.When a user taps a notification, any data accompanying the notification message is made available in the Intent extras. 다음 코드를 사용 하 여이 데이터를 추출할 수 있습니다.This data can be extracted with the following code:

if (Intent.Extras != null)
{
  foreach (var key in Intent.Extras.KeySet())
  {
    var value = Intent.Extras.GetString(key);
    Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
  }
}

응용 프로그램의 실행 기 Intent 이 코드는 함께 제공 되는 데이터를 로그인 하도록 사용자가 해당 알림 메시지를 누를 때 발생 합니다 Intent 출력 창에.The application's launcher Intent is fired when the user taps its notification message, so this code will log any accompanying data in the Intent to the output window.

유니버설 Windows 플랫폼Universal Windows Platform

유니버설 Windows 플랫폼 (UWP) 하기 전에 응용 프로그램을 Windows 알림 서비스 (WNS)와 함께, 알림 채널을 반환 하는 등록 해야 하는 푸시 알림을 받을 수 있습니다.Before a Universal Windows Platform (UWP) application can receive push notifications it must register with the Windows Notification Service (WNS), which will return a notification channel. 등록 하 여 호출 되는 InitNotificationsAsync 의 메서드는 App 클래스:Registration is invoked by the InitNotificationsAsync method in the App class:

private async Task InitNotificationsAsync()
{
    var channel = await PushNotificationChannelManager
          .CreatePushNotificationChannelForApplicationAsync();

    const string templateBodyWNS =
        "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";

    JObject headers = new JObject();
    headers["X-WNS-Type"] = "wns/toast";

    JObject templates = new JObject();
    templates["genericMessage"] = new JObject
    {
        {"body", templateBodyWNS},
        {"headers", headers} // Needed for WNS.
    };

    await TodoItemManager.DefaultManager.CurrentClient.GetPush()
          .RegisterAsync(channel.Uri, templates);
}

이 메서드는 푸시 알림 채널을 가져옵니다 JSON으로 알림 메시지 템플릿을 만들고 알림 허브에서 템플릿 알림을 수신 하도록 장치를 등록 합니다.This method gets the push notification channel, creates a notification message template as JSON, and registers the device to receive template notifications from the notification hub.

합니다 InitNotificationsAsync 에서 메서드가 호출 되는 OnLaunched 의 재정의 App 클래스:The InitNotificationsAsync method is invoked from the OnLaunched override in the App class:

protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    await InitNotificationsAsync();
}

이렇게 하면 푸시 알림 등록이 생성 되었거나 때문 인지 확인 하는 WNS 푸시 채널이 항상 활성 응용 프로그램이 시작 될 때마다 새로 고쳐집니다.This ensures that the push notification registration is created or refreshed every time the application is launched, therefore ensuring that the WNS push channel is always active.

푸시 알림이 수신 되 면 자동으로 표시 됩니다으로 알림 – 메시지를 포함 하는 모덜리스 창입니다.When a push notification is received it will automatically be displayed as a toast – a modeless window containing the message.

요약Summary

이 문서에서는 Xamarin.Forms 응용 프로그램에 Azure Mobile Apps에서 푸시 알림을 보내는 Azure Notification Hubs를 사용 하는 방법을 보여 줍니다.This article demonstrated how to use Azure Notification Hubs to send push notifications from an Azure Mobile Apps instance to a Xamarin.Forms application. Azure 알림 허브는 다양한 플랫폼 알림 시스템과 통신해야 하는 백 엔드의 복잡성을 제거하면서 모든 백 엔드에서 모든 모바일 플랫폼으로 모바일 푸시 알림을 전송할 수 있는 확장 가능한 푸시 인프라를 제공합니다.Azure Notification Hubs provide a scalable push infrastructure for sending mobile push notifications from any backend to any mobile platform, while eliminating the complexity of a backend having to communicate with different platform notification systems.