PNS Apple (продвигают сервисы уведомления), пример кода

Я согласен с ответом nategood, так как он закончен, и он, кажется, удовлетворяет ваши потребности. Тем не менее, я хотел бы добавить комментарий об идентификации нескольких (1 или более) ресурсов таким образом:

http://our.api.com/Product/101404,7267261

При этом вы:

Сложите клиентов , заставив их интерпретировать ваш ответ как массив, что для меня будет нелогично, если я сделаю следующий запрос: http://our.api.com/Product/101404

Создать избыточные API с одним API для получения всех продуктов и одним выше для получения 1 или многих. Поскольку вам не следует показывать пользователю более 1 страницы подробностей ради UX, я считаю, что иметь более 1 идентификатора было бы бесполезно и просто использовать для фильтрации продуктов.

Это может быть не так проблематично, но вам придется либо обрабатывать это самостоятельно на стороне сервера, возвращая одну сущность (проверяя, содержит ли ваш ответ один или несколько), либо позволить клиентам управлять ею.

Пример

Я хочу заказать книгу у Удивительно . Я точно знаю, что это за книга, и вижу ее в списке при навигации по книгам ужасов:

  1. 10 000 удивительных строк, 0 удивительных тестов
  2. Возвращение удивительный монстр
  3. Давайте продублируем удивительный код
  4. Удивительное начало конца

После выбора второй книги я перенаправлен на страницу с подробным описанием Книга часть списка:

--------------------------------------------
Book #1
--------------------------------------------
    Title: The return of the amazing monster
    Summary:
    Pages:
    Publisher:
--------------------------------------------

Или на странице, дающей мне полную информацию только об этой книге?

---------------------------------
The return of the amazing monster
---------------------------------
Summary:
Pages:
Publisher:
---------------------------------

Мое мнение

Я бы предложил использовать идентификатор в переменной пути, когда при получении сведений об этом ресурсе гарантируется уникальность. Например, приведенные ниже API-интерфейсы предлагают несколько способов получения сведений для определенного ресурса (при условии, что продукт имеет уникальный идентификатор, а спецификация для этого продукта имеет уникальное имя, и вы можете перемещаться сверху вниз):

/products/{id}
/products/{id}/specs/{name}

В тот момент, когда вам нужно более 1 ресурса, я бы предложил отфильтровать большую коллекцию. Для того же примера:

/products?ids=

Конечно, это мое мнение, поскольку оно не навязано.

51
задан Janak Nirmal 29 July 2012 в 22:59
поделиться

7 ответов

Худшая часть настройки службы push-уведомлений - это подготовка. Основным камнем преткновения, с которым я столкнулся, было то, что в файле .cer, который вы загружаете с сайта Apple, есть сертификат и ключ, я написал системную службу на C #, которая отправляла уведомления, и соединения продолжали сбоить, потому что я экспортировал сертификат. а не ключ.

Я не помню, кто это изначально написал, вот небольшой фрагмент кода на Python, который помог мне, когда я впервые тестировал службу уведомлений. Мне он нравится, потому что он очень прост и хорошо работает во время тестирования.

import socket, ssl, json, struct

# device token returned when the iPhone application
# registers to receive alerts

deviceToken = 'XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX' 

thePayLoad = {
     'aps': {
          'alert':'Oh no! Server\'s Down!',
          'sound':'k1DiveAlarm.caf',
          'badge':42,
          },
     'test_data': { 'foo': 'bar' },
     }

# Certificate issued by apple and converted to .pem format with openSSL
# Per Apple's Push Notification Guide (end of chapter 3), first export the cert in p12 format
# openssl pkcs12 -in cert.p12 -out cert.pem -nodes 
#   when prompted "Enter Import Password:" hit return
#
theCertfile = 'cert.pem'
# 
theHost = ( 'gateway.sandbox.push.apple.com', 2195 )

# 
data = json.dumps( thePayLoad )

# Clear out spaces in the device token and convert to hex
deviceToken = deviceToken.replace(' ','')
byteToken = bytes.fromhex( deviceToken ) # Python 3
# byteToken = deviceToken.decode('hex') # Python 2

theFormat = '!BH32sH%ds' % len(data)
theNotification = struct.pack( theFormat, 0, 32, byteToken, len(data), data )

# Create our connection using the certfile saved locally
ssl_sock = ssl.wrap_socket( socket.socket( socket.AF_INET, socket.SOCK_STREAM ), certfile = theCertfile )
ssl_sock.connect( theHost )

# Write out our data
ssl_sock.write( theNotification )

# Close the connection -- apple would prefer that we keep
# a connection open and push data as needed.
ssl_sock.close()

Есть также гем rails под названием apn_on_rails, который, кажется, работает очень хорошо, если вы разрабатываете приложение rails. Я только что увидел его сегодня и смог отправить уведомления из консоли.

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

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

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

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

Во время тестирования вы можете просто вставьте deviceToken в консоль с помощью NSLog, затем вставьте его в скрипт python, приведенный выше, в процессе производства вам, очевидно, потребуется настроить какой-либо метод для передачи токена на ваши серверы.

Кроме того, в производственной среде вам нужно будет запросить службу обратной связи Apple и удалить токены устройств у пользователей, которые удалили ваше приложение.

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

Кроме того, в рабочей среде вам потребуется запросить службу обратной связи Apple и удалить токены устройств у пользователей, которые удалили ваше приложение.

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

Кроме того, в производственной среде вам нужно будет запросить службу обратной связи Apple и удалить токены устройств у пользователей, которые удалили ваше приложение.

59
ответ дан 7 November 2019 в 09:59
поделиться

Поищите на форумах в центре разработки iPhone, якобы есть много примеров серверного кода для взаимодействия с push-сервером Apple.

2
ответ дан 7 November 2019 в 09:59
поделиться

На стороне iPhone действительно не так много кода для написания. Вам нужно получить уникальный токен iPhone или iPod Touch, а затем передать этот токен на свой сервер. Для получения токена требуется вызов UIApplication, но предопределенного способа доставки его на ваш сервер нет. Одно из моих приложений выполняет HTTP POST для PHP-скрипта, который помещает токен в базу данных.

Если вам интересно, как подготовить и настроить сертификаты и т. Д., Вы можете проверить Apple Push Notification Руководство по программированию сервисов.

5
ответ дан 7 November 2019 в 09:59
поделиться

http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/

Это one очень помог мне с созданием кода на стороне провайдера на сервере Linux с PHP.

12
ответ дан 7 November 2019 в 09:59
поделиться

Хорошее место для начала - Городской дирижабль . Вы можете создать бесплатную базовую учетную запись, которая будет выполнять всю работу на стороне сервера по отправке push-уведомлений на серверы Apple. Они также отлично проводят вас через все этапы, необходимые для того, чтобы ваше приложение работало с их сервисом, и имеют отличный пример кода, который показывает, как зарегистрировать ваше приложение для получения уведомлений.

У меня нет никаких других связей с ними, кроме чем быть счастливым пользователем их услуг.

15
ответ дан 7 November 2019 в 09:59
поделиться

Я знаю, что это было поздно, но вы должны увидеть проект MonoPush . Похоже, они предоставят новый способ интеграции push, а также подробную статистику, включая статистику по карте.

3
ответ дан 7 November 2019 в 09:59
поделиться

На случай, если это поможет, я написал библиотеку Python, PyAPNs, для взаимодействия со службой push-уведомлений на стороне сервера:

http://github.com/simonwhitaker/PyAPNs

14
ответ дан 7 November 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: