Created
December 20, 2011 22:23
-
-
Save mdaguete/1503561 to your computer and use it in GitHub Desktop.
APNS Util
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This is what you need to add to your applicationDidFinishLaunching | |
*/ | |
- (void)applicationDidFinishLaunching:(UIApplication *)application | |
{ | |
// Add registration for remote notifications | |
[[UIApplication sharedApplication] | |
registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; | |
// Clear application badge when app launches | |
application.applicationIconBadgeNumber = 0; | |
} | |
/* | |
* -------------------------------------------------------------------------------------------------------------- | |
* BEGIN APNS CODE | |
* -------------------------------------------------------------------------------------------------------------- | |
*/ | |
/** | |
* Fetch and Format Device Token and Register Important Information to Remote Server | |
*/ | |
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { | |
#if !TARGET_IPHONE_SIMULATOR | |
// Get Bundle Info for Remote Registration (handy if you have more than one app) | |
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]; | |
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; | |
// Check what Notifications the user has turned on. We registered for all three, but they may have manually disabled some or all of them. | |
NSUInteger rntypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; | |
// Set the defaults to disabled unless we find otherwise... | |
NSString *pushBadge = (rntypes & UIRemoteNotificationTypeBadge) ? @"enabled" : @"disabled"; | |
NSString *pushAlert = (rntypes & UIRemoteNotificationTypeAlert) ? @"enabled" : @"disabled"; | |
NSString *pushSound = (rntypes & UIRemoteNotificationTypeSound) ? @"enabled" : @"disabled"; | |
// Get the users Device Model, Display Name, Unique ID, Token & Version Number | |
UIDevice *dev = [UIDevice currentDevice]; | |
NSString *deviceUuid; | |
if ([dev respondsToSelector:@selector(uniqueIdentifier)]) | |
deviceUuid = dev.uniqueIdentifier; | |
else { | |
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; | |
id uuid = [defaults objectForKey:@"deviceUuid"]; | |
if (uuid) | |
deviceUuid = (NSString *)uuid; | |
else { | |
CFStringRef cfUuid = CFUUIDCreateString(NULL, CFUUIDCreate(NULL)); | |
deviceUuid = (NSString *)cfUuid; | |
CFRelease(cfUuid); | |
[defaults setObject:deviceUuid forKey:@"deviceUuid"]; | |
} | |
} | |
NSString *deviceName = [dev.name stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; | |
NSString *deviceModel = [dev.model stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; | |
NSString *deviceSystemVersion = dev.systemVersion; | |
// Prepare the Device Token for Registration (remove spaces and < >) | |
NSString *deviceToken = [[[[devToken description] | |
stringByReplacingOccurrencesOfString:@"<"withString:@""] | |
stringByReplacingOccurrencesOfString:@">" withString:@""] | |
stringByReplacingOccurrencesOfString: @" " withString: @""]; | |
// Build URL String for Registration | |
// !!! CHANGE "www.mywebsite.com" TO YOUR WEBSITE. Leave out the http:// | |
// !!! SAMPLE: "secure.awesomeapp.com" | |
NSString *host = @"www.mywebsite.com"; | |
// !!! CHANGE "/apns.php?" TO THE PATH TO WHERE apns.php IS INSTALLED | |
// !!! ( MUST START WITH / AND END WITH ? ). | |
// !!! SAMPLE: "/path/to/apns.php?" | |
NSString *urlString = [NSString stringWithFormat:@"/apns.php?task=%@&appname=%@&appversion=%@&deviceuid=%@&devicetoken=%@&devicename=%@&devicemodel=%@&deviceversion=%@&pushbadge=%@&pushalert=%@&pushsound=%@", @"register", appName,appVersion, deviceUuid, deviceToken, deviceName, deviceModel, deviceSystemVersion, pushBadge, pushAlert, pushSound]; | |
// Register the Device Data | |
// !!! CHANGE "http" TO "https" IF YOU ARE USING HTTPS PROTOCOL | |
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:host path:urlString]; | |
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; | |
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; | |
NSLog(@"Register URL: %@", url); | |
NSLog(@"Return Data: %@", returnData); | |
#endif | |
} | |
/** | |
* Failed to Register for Remote Notifications | |
*/ | |
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { | |
#if !TARGET_IPHONE_SIMULATOR | |
NSLog(@"Error in registration. Error: %@", error); | |
#endif | |
} | |
/** | |
* Remote Notification Received while application was open. | |
*/ | |
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { | |
#if !TARGET_IPHONE_SIMULATOR | |
NSLog(@"remote notification: %@",[userInfo description]); | |
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; | |
NSString *alert = [apsInfo objectForKey:@"alert"]; | |
NSLog(@"Received Push Alert: %@", alert); | |
NSString *sound = [apsInfo objectForKey:@"sound"]; | |
NSLog(@"Received Push Sound: %@", sound); | |
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); | |
NSString *badge = [apsInfo objectForKey:@"badge"]; | |
NSLog(@"Received Push Badge: %@", badge); | |
application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue]; | |
#endif | |
} | |
/* | |
* -------------------------------------------------------------------------------------------------------------- | |
* END APNS CODE | |
* -------------------------------------------------------------------------------------------------------------- | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment