Giới thiệu gem APNS

APNS là viết tắt của "Apple Push Notification Services"

  • Gem APNS hỗ trợ việc push notification về cho các ứng dụng iOS Ở bài viết này sẽ hưỡng dẫn các bạn có thể setup nhanh việc push notification tương tự như GCM, Rpush push notification về các thiết bị android

Install gem apns

sudo gem install apns

Setup

Convert your certificate

Tạo file certificate dưới định dạng p12. Sau đó chuyển đổi về dưới dạng một file pem

openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts

Sau khi đã tồn tại file pem, thực hiện cấu hình host port, pem_url trên lớp apns.rb

  if Rails.env.development?
        APNS.host = "gateway.sandbox.push.apple.com"
        APNS.pem = '/path/to/pem/develop_file'
        APNS.pass = 'your_password'
        APNS.port = 2195
  else
        APNS.host = "gateway.push.apple.com"
        APNS.pem = '/path/to/pem/production_file'
        APNS.pass = 'your_password'
        APNS.port = 2195
  end 

Example (Single notification)

Để gửi một thông báo đẩy bạn có thể chỉ cần gửi một chuỗi như các cảnh báo hoặc cung cấp cho nó một hash cho các cảnh báo, huy hiệu và âm thanh.

   device_token = '123abc456def'
   
   APNS.send_notification(device_token, 'Hello iPhone!' )
   
   APNS.send_notification(device_token, :alert => 'Hello iPhone!', :badge => 1, :sound => 'default')

Example (Multiple notifications)

Gửi nhiều thông báo bằng cách sử dụng cùng một kết nối cho Apple

    device_token = '123abc456def'

    n1 = APNS::Notification.new(device_token, 'Hello iPhone!' )

    n2 = APNS::Notification.new(device_token, :alert => 'Hello iPhone!', :badge => 1, :sound => 'default')
    
    APNS.send_notifications([n1, n2])

Trong trường hợp muốn gửi thêm thông tin khác cùng với notification

APNS.send_notification(
    device_token,
    alert: 'Hello iPhone!',
    badge: 1,
    sound: 'default',
    other: {
          other_1: 123,
          other_2: "123",
          .....
    })

Dữ liệu nhận về:

{
   "aps": {
     "alert": "Hello iPhone!",
     "badge": 1,
     "sound": "default"
   },
   "other_1": 123,
   "other_2": "123",
   .....
 }

Get device tocken

Sau khi cài đặt xong việc push notification phía server, phần còn lại sẽ là đăng kí device tocken phía client

ApplicationAppDelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{    
    // Register with apple that this app will use push notification
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | 
      UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];

    // Your app startup logic...
    return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    // Convert the binary data token into an NSString (see below for the implementation of this function)
    NSString *deviceTokenAsString = stringFromDeviceTokenData(deviceToken);

    // Show the device token obtained from apple to the log
    NSLog(@"deviceToken: %@", deviceTokenAsString);
}

stringFromDeviceTokenData function

NSString* stringFromDeviceTokenData(NSData *deviceToken) {
      const char *data = [deviceToken bytes];
      NSMutableString* token = [NSMutableString string];

     for (int i = 0; i < [deviceToken length]; i++) {
         [token appendFormat:@"%02.2hhX", data[i]];
     }

     return [[token copy] autorelease];
}

Chi tiết tham khảo tại https://github.com/jpoz/APNS