PushNotificationの試し方
三ヶ月前の古いメモを書き起こしてるんで不正確かも
わからなかったり引っかかったりしたらおググりになって下さい。
[1]iOS DevのOverviewを開く
(https://developer.apple.com/ios/manage/overview/index.action)
[2]App IDsを開く
(https://developer.apple.com/ios/manage/bundles/index.action)
[3]CreateApp IDを開いてIDを作成する
(https://developer.apple.com/ios/manage/bundles/add.action)
例:
Description "pushtest"
Bundle Identifier "jp.co.hoge.pushtest"
[4]作成したIDの設定
作成したIDのConrfigureリンクに飛ぶ
Enable for Apple Push Notification serviceをチェック
Development Push SSL CertificateのConfigureをクリック
[5]証明書作成
キーチェーン起動→証明アシスタント→認証局に証明書を要求
ディスクに保存をチェック→続ける→保存
[6]証明書アップロード
ブラウザに戻ってContinue
証明書を選択してGenerate
認証されたらContinue
DownloadしてDoneで閉じる
Enabledになっていることを確認
[7]証明書書き出し
ダウンロードした証明書をダブルクリックして保存
キーチェーン左メニューの「自分の証明書」内Push Servicesを選択
ファイル→書き出す(p12)→保存 apns-dev-certと入力
キーチェーン画面からApple Development Push Services横の三角を開く
秘密鍵を選択→ファイル→書き出す(p12)→保存(apns-dev-key.p12)
[8]pem作成
下記コマンドを実行
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem
[9] Provisioning Portalでプロファイルを変更
DevelopmentのプロファイルのApp IDをpushtestに変更してダウンロード
プロジェクトのプロファイルをダウンロードしたものに変更
[10]iOS側ソース
受信するNotifyのタイプを登録する
************************************************************************************
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//省略
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge|
UIRemoteNotificationTypeSound|
UIRemoteNotificationTypeAlert)];
}
************************************************************************************
デバイスのトークンを取得
************************************************************************************
-(void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"deviceToken:%@ " , deviceToken);
}
************************************************************************************
Notifyが来たら呼ばれる
************************************************************************************
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"ReceiveRemoteNotification on foreground: %@", userInfo);
}
************************************************************************************
[11]Rubyスクリプト
作成した.pemファイルと同じディレクトリに作成
************************************************************************************************************
#!/usr/bin/ruby
require 'openssl'
require 'socket'
device = ['*************************************************************']
socket = TCPSocket.new('gateway.sandbox.push.apple.com',2195)
context = OpenSSL::SSL::SSLContext.new('SSLv3')
context.cert = OpenSSL::X509::Certificate.new(File.read('apns-dev.pem'))
context.key = OpenSSL::PKey::RSA.new(File.read('apns-dev-key-noenc.pem'))
ssl = OpenSSL::SSL::SSLSocket.new(socket, context)
ssl.connect
payload = <<-EOS
{
"aps":{
"alert":"New Message!",
"badge":1,
"sound":"default"
}
}
EOS
(message = []) << ['0'].pack('H') << [32].pack('n') << device.pack('H*') << [payload.size].pack('n') << payload
ssl.write(message.join(''))
ssl.close
socket.close
************************************************************************************************************