Вопрос по iphone – Пример кода Apple PNS (услуги push-уведомлений)

51

Есть ли пример проекта, показывающий, как использовать APNS на IPhone и как настроить вещи? Я сейчас смотрю на документацию, но было бы неплохо иметь какой-то рабочий код, который можно было бы выделить, и посмотреть, как все это работает вместе?

Кажется, я ничего не могу найти с помощью Google или в центре разработки iphone.

@ froh42 У тебя есть какой-нибудь удовлетворительный код? Я также хочу пример кода для пошаговой реализации. Если у вас есть, пожалуйста, предоставьте его мне. Заранее спасибо. Zalak Patel
Проверьте здесьarashnorouzi.wordpress.com/2011/03/31/… это именно то, что вы ищете. Moon

Ваш Ответ

10   ответов
14

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

http://github.com/simonwhitaker/PyAPNs

Error: User Rate Limit Exceeded
2

предположительно, есть много примеров серверного кода для общения с push-сервером Apple.

59

ным камнем преткновения, с которым я столкнулся, было наличие сертификата и ключа в файле .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 и удалить токены устройств у пользователей, которые удалили ваше приложение.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhelios.ioError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgithub.com/simonwhitaker/PyAPNs
5

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

Если вам интересно узнать о предоставлении и настройке сертификатов и т. Д., Вы можете обратиться к Руководству по программированию службы push-уведомлений Apple.

Error: User Rate Limit Exceeded froh42
1

Вот проверенная php5-версия тестового сценария jessecurry. Он использует & apos;расширенный формат сообщения& apos; и пытается отловить и отобразить ошибки Apple. Это может указывать на то, что не так с вашими сообщениями.

// Settings
$deviceToken = 'xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx';
$apnsCert = 'apns-dev.pem';
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;

// Prepare payload
$payload = 
array(
    'aps' => array(
        'alert' => 'Hi, this is an alert!',
        'badge' => 8
    )
);
$payload = json_encode($payload);
print($payload . "\n");

// Connect to Apple Push Notification server
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if (!$apns) {
    die('Error creating ssl socket');
}
// Don't block on reading from the socket
stream_set_blocking ($apns, 0);

// Send payload in enhanced message format ( http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1 )
$apnsMessage = 
    // Command "1"
    chr(1)
    // Identifier "88"
    . pack('N', 88)
    // Expiry "tomorrow"
    . pack('N', time() + 86400)
    // Token length
    . chr(0) . chr(32) 
    // Device token
    . pack('H*', str_replace(' ', '', $deviceToken)) 
    // Payload length
    . chr(0) . chr(strlen($payload)) 
    // Actual payload
    . $payload . $payload;
fwrite($apns, $apnsMessage);

// Pause for half a second to check if there were any errors during the last seconds of sending.
usleep(500000); 

checkAppleErrorResponse($apns);

// Close connection -- apple would prefer that we keep
// a connection open and push data as needed.
fclose($apns);

function checkAppleErrorResponse($apns)
{
    $responseBinary = fread($apns, 6);
    if ($responseBinary !== false && strlen($responseBinary) == 6)
    {
        print(
            "\n"
            .'Error message recieved from Apple.'."\n"
            .'For the meaning, refer to: "Provider Communication with Apple Push Notification Service"'."\n"
        );
        $response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary);
        var_dump($response);
    }
}
15

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/5634125/…Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
12

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

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

Error: User Rate Limit Exceeded
3

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

1

ПопробуйтеNWPusher проект на GitHub. Он предоставляет приложения для OS X и iOS для отправки push-уведомлений вручную, или вы можете напрямую использовать прилагаемую библиотеку Objective-C.

4

что это очень старый вопрос и получил много ответов, но я нашел учебникРей Вендерлих очень полезно и хотел поделиться им для начинающих APNS. Это очень полезно и очень легко понять.

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