Skip to content

Instantly share code, notes, and snippets.

@sawapi
Last active October 25, 2023 09:26
Show Gist options
  • Save sawapi/a7cee65e4ad95578044d to your computer and use it in GitHub Desktop.
Save sawapi/a7cee65e4ad95578044d to your computer and use it in GitHub Desktop.
[Swift] Push Notification
<?php
$deviceToken = '************';
// 送信する文字列
$alert = 'Push test.';
// バッジ
$badge = 1;
$body = array();
$body['aps'] = array( 'alert' => $alert );
$body['aps']['badge'] = $badge;
// SSL証明書
$cert = '********.pem';
$url = 'ssl://gateway.sandbox.push.apple.com:2195'; // 開発用
//$url = 'ssl://gateway.push.apple.com:2195'; // 本番用
$context = stream_context_create();
stream_context_set_option( $context, 'ssl', 'local_cert', $cert );
$fp = stream_socket_client( $url, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $context );
if( !$fp ) {
echo 'Failed to connect.' . PHP_EOL;
exit( 1 );
}
$payload = json_encode( $body );
$message = chr( 0 ) . pack( 'n', 32 ) . pack( 'H*', $deviceToken ) . pack( 'n', strlen($payload ) ) . $payload;
print 'send message:' . $payload . PHP_EOL;
fwrite( $fp, $message );
fclose( $fp );
//
// AppDelegate.swift
// pushtest
//
// Created by sawapi on 2014/06/08.
// Copyright (c) 2014年 sawapi. All rights reserved.
//
// iOS8用
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application( application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary? ) -> Bool {
// Push通知を許可する
var types: UIUserNotificationType = UIUserNotificationType.Badge |
UIUserNotificationType.Alert |
UIUserNotificationType.Sound
var settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )
application.registerUserNotificationSettings( settings )
application.registerForRemoteNotifications()
return true
}
// デバイストークンを取得する
func application( application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData! ) {
// <>と" "(空白)を取る
var characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )
var deviceTokenString: String = ( deviceToken.description as NSString )
.stringByTrimmingCharactersInSet( characterSet )
.stringByReplacingOccurrencesOfString( " ", withString: "" ) as String
println( deviceTokenString )
}
// デバイストークンの取得に失敗した場合
func application( application: UIApplication!, didFailToRegisterForRemoteNotificationsWithError error: NSError! ) {
println( error.localizedDescription )
}
func applicationWillResignActive( application: UIApplication ) {
}
func applicationDidEnterBackground( application: UIApplication ) {
}
func applicationWillEnterForeground( application: UIApplication ) {
}
func applicationDidBecomeActive( application: UIApplication ) {
}
func applicationWillTerminate( application: UIApplication ) {
}
}
//
// AppDelegate.swift
// pushtest
//
// Created by sawapi on 2014/06/08.
// Copyright (c) 2014年 sawapi. All rights reserved.
//
// iOS7以下
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application( application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary? ) -> Bool {
application.registerForRemoteNotificationTypes( UIRemoteNotificationType.Badge |
UIRemoteNotificationType.Sound |
UIRemoteNotificationType.Alert )
return true
}
// デバイストークンを取得する
func application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {
// <>と" "(空白)を取る
var characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )
var deviceTokenString: String = ( deviceToken.description as NSString )
.stringByTrimmingCharactersInSet( characterSet )
.stringByReplacingOccurrencesOfString( " ", withString: "" ) as String
println( deviceTokenString )
}
func applicationWillResignActive( application: UIApplication ) {
}
func applicationDidEnterBackground( application: UIApplication ) {
}
func applicationWillEnterForeground( application: UIApplication ) {
}
func applicationDidBecomeActive( application: UIApplication ) {
}
func applicationWillTerminate( application: UIApplication ) {
}
}
@herock1
Copy link

herock1 commented May 21, 2015

Can you please explain where you have received json data that has sent by Server.

@JackBTheDev
Copy link

I believe this is the method you are looking for

@jlooireignacio
Copy link

Where can i download the whole project ? as my referal, link please .Thank you

@antonio081014
Copy link

var types: UIUserNotificationType = UIUserNotificationType.Badge |
                   UIUserNotificationType.Alert |
                   UIUserNotificationType.Sound
var settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )

        application.registerUserNotificationSettings( settings )

does not support anymore.
Use

let notificationSetting = UIUserNotificationSettings(forTypes: [UIUserNotificationType.Badge,
            UIUserNotificationType.Sound, UIUserNotificationType.Alert], categories: nil)
application .registerUserNotificationSettings(notificationSetting);

instead

@Gkiokan
Copy link

Gkiokan commented Oct 31, 2018

For iOS < 10 you can use this code.
Since iOS 10.0 this is deprecated.

        let notificationSetting = UIUserNotificationSettings(types: [UIUserNotificationType.badge,
                                                                        UIUserNotificationType.sound, UIUserNotificationType.alert], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(notificationSetting);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment