iOS的推送教程

這篇文章是搬遷自我自己的新浪博客的,因爲無法自動搬遷所以就自己動手了
前段時間公司的項目需要用到推送所以就這個方面做了些工作,現在想總結出來給大家共同分享。當然了,因爲本人水平有限,有錯漏的地方歡迎大家指正。

首先就是最繁瑣最重要的註冊證書了,關於證書的註冊很多前輩已經總結 的很詳細了,我在這裏就不多加贅述。這些鏈接都是比較全面的關於證書註冊的教程大家可以先看看​http://blog.csdn.net/shenjie12345678/article/details/41120637http://www.cocoachina.com/industry/20130321/5862.html這兩篇文章都介紹了證書註冊的一些知識,內容差不多。

我這篇文章將着重介紹證書生成後所要做的工作。首先你要生成服務端的證書,在這裏我就介紹怎樣生成java服務器的證書:

(1)將.cer文件轉換成.pem文件 openssl x509 -in aps_development.cer -inform der -out PushDevelopment.pem​

(2)將.p12文件轉換爲.pem文件 openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12

​(3)將現在生成的兩個.pem文件生成.p12文件 openssl pkcs12 -export -in PushDevelopment.pem -inkey PushChatKey.pem -out pushCert.p12 -name “apns-cert”​​

通過這三步你就可以獲取到java服務器所需要的證書了,關於生成php服務器的證書的前面給的連接中都有涉及。

然後你要在你的工程中註冊推送,在- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(nullable NSDictionary )launchOptions NS_AVAILABLE_IOS(3_0)​方法中可以註冊遠程推送

關於註冊推送的部分我寫 了個方法:

 (void)iOSPushActionApplication:(UIApplication *)application {



#ifdef __IPHONE_8_0 if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {

        UIUserNotificationSettings *settings = [UIUserNotificationSetting ssettingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlertcategories:nil];

        [[UIApplicationsharedApplication] registerUserNotificationSettings:settings];

    }  else {

        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;

        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];

    }

#else

    UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];

#endif

}

#ifdef __IPHONE_8_0

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings

{

    [application registerForRemoteNotifications];

}

#endif

註冊推送完成後,appdelegate還有幾個關於推送的代理方法,我們可以在這幾個方法中對推送進行處理:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSString *st = [NSStringstringWithFormat:@"%@",deviceToken];

    NSString *string = [st substringWithRange:NSMakeRange(1, st.length-2)];

    NSString *substring = [string stringByReplacingOccurrencesOfString:@" "withString:@""]; //這樣獲取的字符串就是服務器所需要的deviceToken

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { //下面的處理是爲了點開推送后角標可以清零

    [[UIApplicationsharedApplication] setApplicationIconBadgeNumber:1];

    [[UIApplicationsharedApplication] setApplicationIconBadgeNumber:0];

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

    NSLog(@"Regist fail%@",error);

}

此外關於推送的條數是服務器控制的(app圖標上的角標數),服務端向蘋果的服務器所發送的json串有一個key就是控制推送條數的,寫什麼數字,角標顯示的就是什麼數字。{“aps”:{“alert”:”這是iOS的推送測試.”,”badge”:1}},badge這key表示的就是角標數

最後,一般我們證書生成後都想拋開服務端自己測試測試,這樣你可以使用一個第三方的工具​PushMeBaby。

你下載了這個​PushMeBaby項目後首先要導入你的aps_development.cer證書,然後你要填入你獲取到的deviceToken。

在這個項目的​ApplicationDelegate類的init方法中修改如下兩行代碼,將它改成你自己的信息:

self.deviceToken = @"8d33fbe9 c0d05bb0 325dd3e1 92a79fda c277ed85 3931c4d6 3bd15676 1b27572e";​ //填寫你自己的deviceToken

self.certificate = [[NSBundlemainBundle] pathForResource:@"aps_development"ofType:@"cer"];​ //填寫你自己的證書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章