Push-уведомлений в iOSPush Notifications in iOS

Важно!

Сведения в этом разделе, относятся к iOS 9 и предыдущий, она была оставлена здесь для поддержки более старых версий iOS.The information in this section pertains to iOS 9 and prior, it has been left here to support older iOS versions. IOS 10 и более поздние версии, см. в разделе руководство по Framework уведомление пользователя за поддержку локальных и удаленных уведомлений на устройства iOS.For iOS 10 and later, please see the User Notification Framework guide for supporting both Local and Remote Notification on an iOS device.

Push-уведомления, должны храниться краткое и только содержат достаточно данных для уведомления мобильного приложения о том, что его следует обратиться к серверному приложению для обновления.Push notifications should be kept brief and only contain enough data to notify the mobile application that it should contact the server application for an update. Например когда приходит новое электронное письмо, серверное приложение будет только уведомления мобильных приложения поступления новых сообщений электронной почты.For example, when new email arrives, the server application would only notify the mobile application that new email has arrived. Уведомление не будет содержать новое сообщение электронной почты, сама.The notification would not contain the new email itself. Мобильное приложение затем извлечет новых сообщений электронной почты с сервера во время соответствующегоThe mobile application would then retrieve the new emails from the server when it was appropriate

В центре принудительной отправке уведомления в iOS — Apple Push Notification шлюз Service (APNS).At the center of push notifications in iOS is the Apple Push Notification Gateway Service (APNS). Это служба, предоставляемых компанией Apple, который отвечает за маршрутизации уведомления от сервера приложений на устройствах iOS.This is a service provided by Apple that is responsible for routing notifications from an application server to iOS devices. На следующем рисунке показана топология уведомлений Push-уведомлений для iOS: The following image illustrates the push notification topology for iOS:

Удаленные уведомления, сами являются строки, которые соответствуют формату в формате JSON и протоколы, указанные в полезные данные уведомления раздел локальных и Push-уведомлений руководство по программированиюв документация для разработчиков iOS.Remote notifications themselves are JSON formatted strings that adhere to the format and protocols specified in The Notification Payload section of the Local and Push Notification Programming Guide in the iOS developer documentation.

Apple поддерживает две среды из APNS: "песочницы" и рабочей среды.Apple maintains two environments of APNS: a Sandbox and a Production environment. Среда "песочницы" предназначена для тестирования на этапе разработки и может быть найдено на gateway.sandbox.push.apple.com через TCP-порт 2195.The Sandbox environment is meant for testing during the development phase and can be found at gateway.sandbox.push.apple.com on TCP port 2195. В рабочей среде предназначен для использования в приложениях, которые были развернуты и можно найти в gateway.push.apple.com через TCP-порт 2195.The Production environment is meant to be used in applications that have been deployed and can be found at gateway.push.apple.com on TCP port 2195.

ТребованияRequirements

Push-уведомлений необходимо соблюдать следующие правила, которые определяются архитектурой APNS:Push notification must observe the following rules that are dictated by the architecture of APNS:

  • 256 байт ограничения на количество сообщений -размер всего сообщения уведомления не должен превышать 256 байт.256 byte Message Limit - The entire message size of the notification must not exceed 256 bytes.
  • Подтверждение поступления, не -APNS не предоставляет отправителю все уведомления, в которой сообщения предполагаемому получателю.No Receipt Confirmation - APNS does not provide the sender with any notification that a message made it to the intended recipient. Если устройство недоступно, несколько последовательных уведомления будут отправляться все уведомления, за исключением самого последнего будут потеряны.If the device is unreachable and multiple sequential notifications are sent, all notifications except the most recent will be lost. Только последнего уведомления будут доставлены на устройство.Only the most recent notification will be delivered to the device.
  • Каждому приложению требуется сертификат защищенного -связи с APNS должны выполняться по протоколу SSL.Each application requires a secure certificate - Communication with APNS must be done over SSL.

Создание и использование сертификатовCreating and Using Certificates

Каждой из сред, упомянутые в предыдущем разделе требуется свой собственный сертификат.Each of the environments mentioned in the previous section require their own certificate. В этом разделе мы рассмотрим, как создать сертификат, свяжите ее с помощью профиля подготовки и затем получить сертификат обмена персональными данными для использования с PushSharp.This section will cover how to create a certificate, associate it with a provisioning profile, and then get a Personal Information Exchange certificate for use with PushSharp.

  1. Чтобы создать сертификаты перейдите к iOS портал подготовки на веб-сайте Apple, как показано на следующем снимке экрана (Обратите внимание, что пункт меню идентификаторов приложений в левой части):To create a certificates go to the iOS Provisioning Portal on Apple's website, as shown in the following screenshot (notice the App IDs menu item on the left):

  2. После этого перейдите к разделу идентификаторов приложений и создайте новый идентификатор приложения, как показано на следующем снимке экрана:Next, navigate to the App ID's section and create a new app ID as shown in the following screenshot:

  3. Когда вы щелкаете + кнопки, можно ввести описание и идентификатор пакета для идентификатора приложения, как показано на следующем рисунке:When you click on the + button, you will be able to enter the description and a Bundle Identifier for the app ID, as shown in the next screenshot:

  4. Не забудьте выбрать явный идентификатор приложения и что идентификатор пакета не заканчивается * .Make sure to select Explicit App ID and that the Bundle Identifier doesn't end with a * . Будет создан идентификатор, который хорошо подходит для нескольких приложений и отправки уведомлений сертификаты должны быть для одного приложения.This will create an identifier that is good for multiple applications, and push notification certificates must be for a single application.

  5. В разделе службы приложений, выберите Push-уведомления:Under App Services, select Push Notifications:

  6. И нажмите клавишу отправить для подтверждения регистрации нового идентификатора приложения:And press Submit to confirm registration of the new App ID:

  7. Далее необходимо создать сертификат для идентификатора приложения.Next, you must create the certificate for the app ID. В области навигации слева, перейдите к сертификаты > все и выберите + кнопку, как показано на следующем снимке экрана:In the left hand navigation, browse to Certificates > All and select the + button, as shown in the following screenshot:

  8. Выберите ли вы бы хотели использовать сертификат разработки или рабочей среде:Select whether you would like to use a Development or Production certificate:

  9. А затем выберите новый идентификатор приложения, который мы только что создали.And then select the new App ID that we have just created:

  10. При этом отобразится инструкции, которые позволят вам через процесс создания запрос подписи сертификата с помощью доступ к цепочке ключей приложения на компьютере Mac.This will display instructions that will take you through the process of creating a Certificate Signing Request using the Keychain Access application on your Mac.

  11. Теперь, когда сертификат будет создан, он должен использоваться как часть процесса построения для подписи приложения таким образом, чтобы его можно зарегистрировать с помощью APNs.Now that the certificate has been created, it must be used as part of the build process to sign the application so that it may register with APNs. Для этого создание и установка профиля подготовки, использующего сертификат.This requires creating and installing a provisioning profile that uses the certificate.

  12. Для создания профиля подготовки для разработки, перейдите к профили подготовки разделе и выполните действия, чтобы создать его, используя идентификатор приложения, мы только что создали.To create a development provisioning profile, navigate to the Provisioning Profiles section and follow the steps to create it, using the App Id we have just created.

  13. После создания профиля подготовки, откройте Организатор Xcode и обновить его.Once you've created the provisioning profile, open up Xcode Organizer and refresh it. При создании профиля подготовки не может быть необходимо загрузить профиль на портале подготовки iOS и вручную импортировать его.If the provisioning profile you created does not appear it may be necessary to download the profile from the iOS Provisioning Portal and manually import it. На следующем снимке экрана показан пример Организатор с профилем подготовки добавлен:The following screen shot shows an example of the Organizer with the provision profile added:

  14. На этом этапе необходимо настроить проект Xamarin.iOS для использования нового профиля подготовки.At this point we need to configure the Xamarin.iOS project to use this newly created provisioning profile. Это делается с параметры проекта диалогового окна в разделе подписывание пакета iOS вкладки, как показано на следующем снимке экрана:This is done from Project Options dialog, under iOS Bundle Signing tab, as showing in the following screenshot:

На этом этапе приложение настроено для работы с Push-уведомлений.At this point the application is configured to work with push notifications. Тем не менее по-прежнему существует несколько дополнительных действий, необходимых с сертификатом.However, there are still a few more steps required with the certificate. Этот сертификат находится в DER-формате, который не совместим с PushSharp, который должен быть сертификат обмена личной информацией (PKCS12).This certificate is in DER format that is not compatible with PushSharp, which requires a Personal Information Exchange (PKCS12) certificate. Чтобы преобразовать сертификат, который должен использоваться PushSharp, выполнения этих действий:To convert the certificate so that it is usable by PushSharp, perform these final steps:

  1. Скачать файл сертификата -вкладка "Сертификаты" выбранное имя входа на портал подготовки IOS, выберите сертификат, связанный с нужный профиль подготовки и выбрать загрузить .Download the certificate file - Login to the iOS Provisioning Portal, chose the Certificates tab, select the certificate associated with the correct provisioning profile and chose Download .
  2. Откройте доступ к цепочке ключей -это приложение имеет Графический интерфейс пользователя в систему управления пароля в OS X.Open Keychain Access - This is application is a GUI interface to the password management system in OS X.
  3. Импортируйте сертификат — Если добавляемой еще не установлен, файл... Импорт элементов меню доступ к цепочке ключей.Import the Certificate - If the certificated isn't already installed, File...Import Items from the Keychain Access menu. Перейдите к сертификату, который экспортирован выше и выберите его.Navigate to the certificate that exported above, and select it.
  4. Экспорт сертификата — развернуть отображается связанный закрытый ключ сертификата, щелкните правой кнопкой мыши на ключ и выбрали экспорта.Export the Certificate - Expand the certificate so the associated private key is visible, right-click on the key and chose Export. Вам будет предложено ввести имя файла и пароль для экспортируемого файла.You will be prompted for a filename and a password for the exported file.

На этом этапе мы выполняются с помощью сертификатов.At this point we are done with certificates. Мы создали сертификат, который будет использоваться для подписывания приложений iOS и преобразовать этот сертификат в формате, который может использоваться с PushSharp в серверном приложении.We have created a certificate that will be used to sign iOS applications and converted that certificate to a format that can be used with PushSharp in a server application. Далее рассмотрим взаимодействия приложений iOS с APNS.Next let's look at how iOS applications interact with APNS.

Регистрация с помощью APNSRegistering with APNS

Прежде чем iOS приложение может получить удаленный уведомления, его необходимо зарегистрировать с помощью APNS.Before an iOS application can receive remote notification it must register with APNS. APNS создаст уникальный маркер и возвратить его в приложение iOS.APNS will generate a unique device token and return that to the iOS application. Приложение iOS будет предпринимать маркер устройства и затем зарегистрироваться с сервером приложений.The iOS application will then take the device token and then register itself with the application server. После этого все регистрации завершена, и сервер приложений может Push-уведомления на мобильное устройство.Once all this happens, registration is complete, and the application server may push notifications to the mobile device.

В теории маркер устройства может меняться при каждом приложения iOS регистрирует себя с помощью APNS, однако на практике это не происходит, часто.In theory, the device token may change each time an iOS application registers itself with APNS, however in practice this does not happen that often. Для оптимизации приложения кэширования последних маркер устройства и обновлять сервер приложений, только когда это приводит к изменению.As an optimization an application may cache the most recent device token and only update the application server when it does change. Следующая схема иллюстрирует процесс регистрации и получения маркера устройства:The following diagram illustrates the process of registration and obtaining a device token:

Регистрация с помощью APNS обрабатывается в FinishedLaunching метод класса делегата приложения путем вызова RegisterForRemoteNotificationTypes в текущем UIApplication объекта.Registration with APNS is handled in the FinishedLaunching method of the application delegate class by calling RegisterForRemoteNotificationTypes on the current UIApplication object. При регистрации приложения iOS с помощью APNS его необходимо также указать, какие виды удаленных уведомлений его хотите получать.When an iOS application registers with APNS, it must also specify what types of remote notifications it would like to receive. Эти типы удаленного уведомления объявляются в перечислении UIRemoteNotificationType.These remote notification types are declared in the enumeration UIRemoteNotificationType. В следующем фрагменте кода приведен пример как приложение iOS может зарегистрироваться для получения удаленных оповещение и всплывающих уведомлениях:The following code snippet is an example of how an iOS application can register to receive remote alert and badge notifications:

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
                       UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                       new NSSet ());

    UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
    UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}

Запрос на регистрацию APNS происходит в фоновом режиме — при получении ответа iOS вызовет метод RegisteredForRemoteNotifications в AppDelegate и передайте маркер зарегистрированного устройства.The APNS registration request happens in the background - when the response is received, iOS will call the method RegisteredForRemoteNotifications in the AppDelegate class and pass the registered device token. Токен будет содержаться в NSData объекта.The token will be contained in an NSData object. В следующем фрагменте кода показано, как получить маркер устройства, APNS, предоставляемые:The following code snippet shows how to retrieve the device token that APNS provided:

public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
    // Get current device token
    var DeviceToken = deviceToken.Description;
    if (!string.IsNullOrWhiteSpace(DeviceToken)) {
        DeviceToken = DeviceToken.Trim('<').Trim('>');
    }

    // Get previous device token
    var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");

    // Has the token changed?
    if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
    {
        //TODO: Put your own logic here to notify your server that the device token has changed/been created!
    }

    // Save new device token
    NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}

При сбое регистрации для какой-либо причине (например, устройство не подключено к Интернету), iOS будет вызывать FailedToRegisterForRemoteNotifications приложения класс делегата.If the registration fails for some reason (such as the device is not connected to the Internet), iOS will call FailedToRegisterForRemoteNotifications on the application delegate class. В следующем фрагменте кода показан способ отображения предупреждения пользователю о том, регистрация завершается ошибкой:The following code snippet shows how to display an alert to the user informing them that the registration failed:

public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
    new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}

Маркер устройства по обслуживаниюDevice Token Housekeeping

Маркеры устройств будет устареть или меняться со временем.Device tokens will expire or change over time. По этой причине серверные приложения нужно будет сделать некоторые очистки дома и очистить эти маркеры с истекшим сроком действия или измененные.Because of this fact, server applications will need to do some house cleaning and purge these expired or changed tokens. Когда приложение отправляет в виде Push-уведомлений на устройство с истекшим сроком действия маркера, APNS будет записать и сохранить этот маркер истекшим сроком действия.When an application sends as push notification to a device that has an expired token, APNS will record and save that expired token. Серверы могут запросить APNS, чтобы узнать, какие маркеры, истек срок действия.Servers may then query APNS to find out what tokens have expired.

APNS используется для предоставления обратной связи службы -конечная точка HTTPS, выполняющий проверку подлинности с помощью сертификата, который был создан для отправки отправки уведомлений и отправляет назад данных о какие маркеров, истек срок действия.APNS used to provide a Feedback Service - an HTTPS endpoint that authenticates via the certificate that was created to send push notifications and sends back data about what tokens have expired. Это нерекомендуемая компанией Apple и удалены.This has been deprecated by Apple and removed.

Вместо этого появился новый код состояния HTTP для случая, который был ранее, указываемого службой обратной связи:Instead, there is a new HTTP status code for the case that was previously reported by the Feedback Service:

410 - маркер устройства больше не активна для раздела.410 - The device token is no longer active for the topic.

Кроме того, новый timestamp ключ данных JSON будет находиться в тексте ответа:Additionally, a new timestamp JSON data key will be in the response body:

Если значение в: заголовок состояние 410, значение этого ключа — это время последней, по которому APNs подтверждает, что маркер устройства больше не является допустимым для раздела.If the value in the :status header is 410, the value of this key is the last time at which APNs confirmed that the device token was no longer valid for the topic.

Остановите, пока устройство регистрирует маркер с поздней временной меткой с поставщиком Push-уведомления.Stop pushing notifications until the device registers a token with a later timestamp with your provider.

СводкаSummary

В этом разделе представлены основные понятия, окружающие Push-уведомлений в iOS.This section introduce the key concepts surrounding push notifications in iOS. Оно описывает роли из Apple Push Notification шлюз Service (APNS).It explained the role of the Apple Push Notification Gateway Service (APNS). Затем он рассматривается создание и использование сертификатов безопасности, которые необходимы для APNS.It then covered the creation and use of the security certificates that are essential to APNS. Наконец в этом документе закончил разработку с рассказа о том, как можно использовать серверы приложений обратной связи служб на прекращение отслеживания истечения срока действия маркеров устройств.Finally this document finished up with a discussion on how application servers can use the Feedback Services to stop tracking expired device tokens.