- iOS消息推送实现过程记录
-
这里记录下iOS消息推送实现的全过程
首先,申请秘钥。

<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1q668734yOtodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vv6q3otXfo6y1sci7xOO1w9PQsKGjoaOho6GjoaOhPC9wPgo8cD6147v31eLA7zwvcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140416/2014041609101140.png" alt="\">
如图:

下面实现创建推送证书

接上图:

下图:

第一步完:

为证书添加推送功能:

点击之后的效果:

点击之后




到现在我们已经有俩个证书了,aps_development.cer 和CertificateSigningRequest.certSigningRequest。
下面的步骤比较关键。我们需要把机器中的之前的证书清理干净,如果不清理干净的画会出现如下错误:
Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserInfo=0x17007d6c0 {NSLocalizedDescription=未找到应用程序的“aps-environment”的权利字符串}
这个错误大概的意思就是证书不匹配的意思。

清理之后,我们点击

将推送证书添加进去。
之后我们导出一个可以供服务器端使用的。


以下代码来着网上的活雷锋贡献。
下面附上客户端代码:
1234567891011121314151617181920212223242526272829303132333435363738394041- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// Override point for customization after application launch.NSString* str = [UIDevice currentDevice];if([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {//获取应用程序消息通知标记数(即小红圈中的数字)intbadge = [UIApplication sharedApplication].applicationIconBadgeNumber;if(badge>0) {//如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。badge--;//清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。[UIApplication sharedApplication].applicationIconBadgeNumber = badge;}}//消息推送注册[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];returnYES;}-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{NSString* token = [NSString stringWithFormat:@"%@",deviceToken];NSLog(@"%@",token);}- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {NSString *error_str = [NSString stringWithFormat: @"%@", error];NSLog(@"Failed to get token, error:%@", error_str);}- (void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfo{//在此处理接收到的消息。NSLog(@"Receive remote notification : %@",userInfo);}
下面附上服务器端代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051importorg.apache.log4j.Logger;importorg.apache.log4j.PropertyConfigurator;importjavapns.*;importjavapns.back.PushNotificationManager;importjavapns.back.SSLConnectionHelper;importjavapns.data.Device;importjavapns.data.PayLoad;publicclassPushDemo {publicstaticvoidmain(String[] args)throwsException {try{//从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。String deviceToken ="9f8e0099 1e72c4ab ca835ec3 994e93d9 a09ce215 62d91bb3 6e929a33 02c29456";System.out.println("Push Start deviceToken:"+ deviceToken);//定义消息模式PayLoad payLoad =newPayLoad();payLoad.addAlert("this is test!");payLoad.addBadge(1);//消息推送标记数,小红圈中显示的数字。payLoad.addSound("default");//注册deviceTokenPushNotificationManager pushManager = PushNotificationManager.getInstance();pushManager.addDevice("iPhone", deviceToken);//连接APNSString host ="gateway.sandbox.push.apple.com";//String host = "gateway.push.apple.com";intport =2195;String certificatePath ="/Users/tokou/Desktop/PushDemo.p12";//前面生成的用于JAVA后台连接APNS服务的*.p12文件位置String certificatePassword ="123";//p12文件密码。pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);//发送推送Device client = pushManager.getDevice("iPhone");System.out.println("推送消息: "+ client.getToken()+"\n"+payLoad.toString() +" ");pushManager.sendNotification(client, payLoad);//停止连接APNSpushManager.stopConnection();//删除deviceTokenpushManager.removeDevice("iPhone");System.out.println("Push End");}catch(Exception ex){ex.printStackTrace();}}}
我要投稿
474

被折叠的 条评论
为什么被折叠?



