Руководство. Начальная настройка для получения push-уведомлений из Центров уведомлений Azure

В этом учебнике описано, как использовать Центры уведомлений Azure для отправки push-уведомлений в приложение iOS с помощью пакета SDK для Центров уведомлений Azure для Apple.

В этом руководстве рассматриваются следующие действия:

  • создание примера приложения iOS;
  • подключение приложения iOS к Центрам уведомлений Azure;
  • отправка тестовых push-уведомлений;
  • проверка получения уведомлений приложением.

Готовый код для этого руководства вы можете скачать на сайте GitHub.

Необходимые компоненты

Для работы с этим руководством вам потребуется:

  • компьютер Mac с Xcode, а также действительный сертификат разработчика, установленный в цепочку ключей;
  • устройство iPhone или iPad под управлением iOS 10 или более поздней версии;
  • Физическое устройство, зарегистрированное на портале Apple, и связанное с вашим сертификатом.

Прежде чем продолжить, обязательно пройдите предыдущее руководство по началу работы с Центрами уведомлений Azure для приложений iOS, чтобы создать и настроить учетные данные для отправки push-уведомлений в центре уведомлений. Вы сможете выполнить следующие действия, даже если у вас нет опыта разработки в iOS.

Примечание.

В соответствии с требованиями к настройке push-уведомлений необходимо развернуть push-уведомления и протестировать их на физическом устройстве под управлением iOS (iPhone или iPad), но не в эмуляторе iOS.

Подключение приложения iOS к центрам уведомлений

  1. В Xcode создайте проект Xcode и выберите шаблон вкладки iOS и приложения .

    Diagram that shows Xcode setup for new app

  2. При настройке параметров нового проекта используйте те же имя продукта и идентификатор организации, которые вы использовали при указании идентификатора пакета на портале разработчиков Apple. Пакет, определенный в новом окне проекта, должен заполняться, чтобы соответствовать пакету, определенному на портале разработчика Apple. Ввод осуществляется с учетом регистра.

  3. В разделе Project Navigator выберите имя проекта в разделе "Целевые объекты", а затем перейдите на вкладку "Подписывание " и "Возможности". Убедитесь, что выбрана соответствующая команда для учетной записи разработчика Apple. Среда XCode должна автоматически извлечь профиль подготовки, который вы создали ранее, используя ваш идентификатор пакета.

    Если новый профиль подготовки, созданный в Xcode, не отображается, обновите профили для идентификатора подписи. В строке меню щелкните Xcode выберите Preferences (Настройки), откройте вкладку Account (Учетная запись), нажмите кнопку View Details (Просмотреть сведения), щелкните свой идентификатор подписи, а затем нажмите кнопку Refresh (Обновить) в нижнем правом углу.

    View details

  4. На вкладке Signing & Capabilities (Подписывание и возможности) выберите + Capability (+ Возможность). Дважды щелкните Push-уведомления, чтобы включить их.

    Capability

  5. Добавьте модули пакета SDK для Центров уведомлений Azure.

    Вы можете интегрировать пакет SDK для Центров уведомлений Azure в свое приложение с помощью Cocoapods или вручную, добавив двоичные файлы в свой проект.

    • Интеграция с Cocoapods: добавьте в podfile следующие зависимости, чтобы включить пакет SDK Центров уведомлений Azure в приложение:

      pod 'AzureNotificationHubs-iOS'
      
      • Запустите "pod install", чтобы установить только что определенный объект pod, затем откройте файл с расширением .xcworkspace.

        Если при выполнении pod install возникла ошибка типа Unable to find a specification for AzureNotificationHubs-iOS (Не удается найти спецификацию для AzureNotificationHubs-iOS), выполните pod repo update, чтобы получить последние объекты pod из репозитория Cocoapods, и еще раз выполните pod install.

    • Интеграция через Carthage: добавьте в файл Cartfile следующие зависимости, чтобы включить пакет SDK Центров уведомлений Azure в приложение:

      github "Azure/azure-notificationhubs-ios"
      
      • Затем обновите зависимости сборки:
      $ carthage update
      

      Дополнительные сведения об использовании Carthage см. в репозитории GitHub.

    • Интеграция путем копирования двоичных файлов в проект.

      Для интеграции вы можете просто скопировать двоичные файлы в проект, как описано ниже.

      • Скачайте и распакуйте платформу для пакета средств разработки Центров уведомлений Azure, которая предоставляется в виде ZIP-файла.

      • В XCode щелкните проект правой кнопкой мыши и выберите параметр Add Files to (Добавить файлы в), чтобы добавить папку WindowsAzureMessaging.framework в проект XCode. Нажмите кнопку Options (Параметры), установите флажок Copy items if needed (Копировать элементы при необходимости) и нажмите кнопку Add (Добавить).

        Add framework

  6. Добавьте или измените файл с именем DevSettings.plist, который содержит два свойства: CONNECTION_STRING для строки подключения к Центру уведомлений Azure и HUB_NAME для имени Центра уведомлений Azure.

  7. Добавьте сведения для подключения к Центрам уведомлений Azure в соответствующем разделе <string></string>. Замените строковые литералы--HUB-NAME-- и --CONNECTION-STRING--, выполняющие роль заполнителей, именем центра и значением DefaultListenSharedAccessSignature, которые вы получили ранее на портале:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>HUB_NAME</key>
      <string>--HUB-NAME--</string>
      <key>CONNECTION_STRING</key>
      <string>--CONNECTION-STRING--</string>
    </dict>
    </plist>
    
  8. В том же файле AppDelegate.m замените весь код после didFinishLaunchingWithOptions следующим:

    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    #import <UserNotifications/UserNotifications.h>
    
    // Extend the AppDelegate to listen for messages using MSNotificationHubDelegate and User Notification Center
    @interface AppDelegate () <MSNotificationHubDelegate>
    
    @end
    
    @implementation AppDelegate
    
    @synthesize notificationPresentationCompletionHandler;
    @synthesize notificationResponseCompletionHandler;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        NSString *path = [[NSBundle mainBundle] pathForResource:@"DevSettings" ofType:@"plist"];
        NSDictionary *configValues = [NSDictionary dictionaryWithContentsOfFile:path];
    
        NSString *connectionString = [configValues objectForKey:@"CONNECTION_STRING"];
        NSString *hubName = [configValues objectForKey:@"HUB_NAME"];
    
        if([connectionString length] != 0 && [hubName length] != 0) {
            [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
            [MSNotificationHub setDelegate:self];
            [MSNotificationHub initWithConnectionString:connectionString withHubName:hubName];
    
            return YES;
        }
    
        NSLog(@"Please setup CONNECTION_STRING and HUB_NAME in DevSettings.plist and restart application");
    
        exit(-1);
    }
    
    - (void)notificationHub:(MSNotificationHub *)notificationHub didReceivePushNotification:(MSNotificationHubMessage *)message {
        // Send message using NSNotificationCenter with the message
        NSDictionary *userInfo = [NSDictionary dictionaryWithObject:message forKey:@"message"];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MessageReceived" object:nil userInfo:userInfo];
    }
    
    @end
    

    Этот код подключается к центру уведомлений, используя сведения о подключении, указанные в файле DevSettings.plist. Затем он передает маркер устройства в центр уведомлений, чтобы тот мог отправлять уведомления.

Создание файла заголовка NotificationDetailViewController

  1. Так же, как вы сделали это ранее, добавьте другой файл заголовка с именем SetupViewController.h. Замените содержимое нового файла приведенным ниже кодом:

    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface SetupViewController : UIViewController
    
    @end
    
    NS_ASSUME_NONNULL_END
    
  2. Добавьте файл реализации SetupViewController.m. Замените содержимое этого файла следующим кодом, который реализует методы UIViewController:

    #import "SetupViewController.h"
    
     static NSString *const kNHMessageReceived = @"MessageReceived";
    
     @interface SetupViewController ()
    
     @end
    
     @implementation SetupViewController
    
     - (void)viewDidLoad {
         [super viewDidLoad];
    
         // Listen for messages using NSNotificationCenter
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceivePushNotification:) name:kNHMessageReceived object:nil];
     }
    
     - (void)dealloc {
         // Clean up subscription to NSNotificationCenter
         [[NSNotificationCenter defaultCenter] removeObserver:self name:kNHMessageReceived object:nil];
     }
    
     - (void)didReceivePushNotification:(NSNotification *)notification {
         MSNotificationHubMessage *message = [notification.userInfo objectForKey:@"message"];
    
         // Create UI Alert controller with message title and body
         UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message.title
                              message:message.body
                       preferredStyle:UIAlertControllerStyleAlert];
         [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil]];
         [self presentViewController:alertController animated:YES completion:nil];
    
         // Dismiss after 2 seconds
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
             [alertController dismissViewControllerAnimated:YES completion: nil];
         });
    
     }
    
     @end
    
  3. Выполните сборку приложения и запустите его на устройстве, чтобы убедиться в отсутствии сбоев.

Отправка тестовых push-уведомлений

Можно проверить, поступают ли в приложение уведомления, с помощью параметра Тестовая отправка на портале Azure. Этот параметр позволяет отправить на устройство тестовое push-уведомление.

Test send

Push-уведомления обычно отправляются во внутренней службе, например мобильных приложениях или службе ASP.NET, с помощью совместимой библиотеки. Если для серверной части библиотека недоступна, для отправки уведомлений также можно напрямую использовать REST API.

Ниже приведен список других учебников, касающихся отправки уведомлений:

Проверка получения push-уведомлений приложением

Для тестирования push-уведомлений в iOS необходимо развернуть приложение на физическом устройстве под управлением iOS. Через эмулятор iOS невозможно отправлять push-уведомления Apple.

  1. Запустите приложение и убедитесь, что оно успешно зарегистрировано, а затем нажмите кнопку ОК.

    Register

  2. Теперь отправьте тестовое push-уведомление с портала Azure, как описано в предыдущем разделе.

  3. Push-уведомление отправляется на все устройства, зарегистрированные для получения уведомлений от используемого центра уведомлений.

    Send test

Следующие шаги

В этом простом примере мы отправляем push-уведомления на все зарегистрированные устройства iOS. Сведения о том, как отправлять push-уведомления на конкретные устройства iOS, см. в следующем руководстве:

Руководство по отправке push-уведомлений на определенные устройства

Дополнительные сведения см. в следующих статьях: