APNS(3)Write the Easy Client App
A Very Basic App
Create a new project in Xcode and pick View-based Application.
Product Name: EasyiOSExample
Company Identifier: com.somecompany
Device Family: iPhone
For my mistake here, I need to change the Bundle Identify to com.somecompany.easyiosexample to make it work
Error Message:
Property 'viewController' not found on object of type '*AppDelegate *'
Solution:
Uncheck the story-board during creating the project.
Place these codes in easyiosexampleAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.rootViewController = self.viewController;
[self.windowmakeKeyAndVisible];
// Let the device know we want to receive push notifications
[[UIApplicationsharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
returnYES;
}
When I run that on my real device, it will ask me
"*" Would Like to Send You Push Notifications
Notifications may include alerts, sounds and icon badges. These can be configured in Settings.
I choose 'OK'.
And after that, I can configure that in Settings -> Notification
Add some codes to watch the device token which is getting back from the APNS.
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"My token is: %@", deviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
These lines will print out the device token when we start our app on mobile device.
Actually, if I am not new to iOS, I will write codes here to connect to a REST JSON service or WS service to report the device token to a third part server. The third part server need to know the device token when it wants to send push notification to my device.
Demo a Simple php Server Side
find the file simplepush.php. It is in the http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip.
Change the file ck.pem which I generate to the working directory of SimplePush.
Change the first 3 lines of simple push.php
// Put your device token here (without spaces):
$deviceToken = 'token from the console when we start the iOS app';
// Put your private key's passphrase here:
$passphrase = 'my CERT key';
// Put your alert message here:
$message = 'The content I want to send to notification.';
I am not good at PHP, but the codes are really simple, just open SSL connection to APNS and post a JSON string to it.
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
Good to know the APNS, I am green hand to iOS. I need more practices.
References:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2
http://www.raywenderlich.com/tutorials
APNS(3)Write the Easy Client App
猜你喜欢
转载自sillycat.iteye.com/blog/1769781
今日推荐
周排行