iOS消息推送实现过程记录


消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1、 Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]); 2、 APNS:Apple Push Notification Service[苹果消息推送服务器]; 3、 iPhone:用来接收APNS下发下来的消息; 4、 Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端 app[消息的最终响应者]; 上图可以分为三个阶段: 阶段一:Provider[服务端]把要发送的消息,目的IOS设备标识打包,发送给APNS; 阶段二:APNS在自身的已注册Push服务的IOS设备列表中,查找有相应标识的IOS设备,并将消息发送到IOS设备; 阶段三:IOS设备把发送的消息传递给对应的应用程序,并且按照设定弹出Push通知。
这里记录下iOS消息推送实现的全过程
首先,申请秘钥。
\
如图:
\
下面实现创建推送证书
\

接上图:
\
下图:
\
第一步完:
\

为证书添加推送功能:
\
点击之后的效果:
\
点击之后
\

\

\

\

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

清理之后,我们点击
\

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

\

\

以下代码来着网上的活雷锋贡献。
下面附上客户端代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
     NSString* str = [UIDevice currentDevice];
     
     if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {
         //获取应用程序消息通知标记数(即小红圈中的数字)
         int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
         if (badge> 0 ) {
             //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。
             badge--;
             //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
             [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
         }
     }
     //消息推送注册
     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];
     
         return YES;
}
 
-( 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 *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
     //在此处理接收到的消息。
     NSLog(@ "Receive remote notification : %@" ,userInfo);
}

下面附上服务器端代码:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import javapns.*;
import javapns.back.PushNotificationManager;
import javapns.back.SSLConnectionHelper;
import javapns.data.Device;
import javapns.data.PayLoad;
public class PushDemo {
     public static void main(String[] args) throws Exception {
          try
             {
                 //从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。
                String deviceToken = "9f8e0099 1e72c4ab ca835ec3 994e93d9 a09ce215 62d91bb3 6e929a33 02c29456" ;          
                 System.out.println( "Push Start deviceToken:" + deviceToken);
                 //定义消息模式
                 PayLoad payLoad = new PayLoad();
                 payLoad.addAlert( "this is test!" );
                 payLoad.addBadge( 1 ); //消息推送标记数,小红圈中显示的数字。
                 payLoad.addSound( "default" );
                 //注册deviceToken
                 PushNotificationManager pushManager = PushNotificationManager.getInstance();
                 pushManager.addDevice( "iPhone" , deviceToken);
                 //连接APNS
                 String host = "gateway.sandbox.push.apple.com" ;
                 //String host = "gateway.push.apple.com";
                 int port = 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);
                 //停止连接APNS
                 pushManager.stopConnection();
                 //删除deviceToken
                 pushManager.removeDevice( "iPhone" );
                System.out.println( "Push End" );
             }
             catch (Exception ex)
             {
                 ex.printStackTrace();
             }
     }
}
希望能帮到你;
原文地址:http://www.2cto.com/kf/201404/293459.html


python023基于Python旅游景点推荐系统带vue前后分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
JSP基于SSM网上医院预约挂号系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值