(2)处理推送消息
客户端对推送消息的处理分两种情况:
一 在App没有运行的情况下,系统收到推送消息,用户点击推送消息,启动App。此时,不会执行前面提到的 didReceiveRemoteNotification函数,而是在App的applicationDidFinishLaunching函数中处理推送,通过以下代码可以获取推送消息中的数据: NSDictionary userInfo =[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
二 当APP处于前台时,系统收到推送消息,此时系统不会d出消息提示,会直接触发application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo函数,推送数据在userInfo字典中。
当App处于后台时,如果系统收到推送消息,当用户点击推送消息时,会执行application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo函数,
此时AppDelegate中函数执行的顺序为:
applicationWillEnterForeground
application:didReceiveRemoteNotification
applicationDidBecomeActiveI你们应该用到了跨域,才出现这个问题,前台app和后台不是一个域,所以每次的sessionid不一样,我不知道你们前台用的什么与后台交互的,ajax有一个属性是,withcredentials,把这个设置为true,sessionid就不会变了,这是第一种解决办法,
第二种就是用redis缓存,把信息放入redis也可以解决问题
我们在开发过程中,肯定会有和第三方或者app端的接口调用。在调用的时候,下面的方法可以来防止非法链接或者恶意攻击。
一、签名
根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取>
在使用Base64方式的编码后,Token字符串还是有20多位,有的时候还是嫌它长了。由于GUID本身就有128bit,在要求有良好的可读性的前提下,很难进一步改进了。那我们如何产生更短的字符串呢?还有一种方式就是较少Token的长度,不用GUID,而采用一定长度的随机数,例如64bit,再用Base64编码表示:
var rnd = new Random();
var tokenData = userIp+userId;
rndNextBytes(tokenData);
var token = ConvertToBase64String(tokenData)TrimEnd('=');
由于这里只用了64bit,此时得到的字符串为Onh0h95n7nw的形式,长度要短一半。这样就方便携带多了。但是这种方式是没有唯一性保证的。不过用来作为身份认证的方式还是可以的(如网盘的提取码)。
二、加密
客户端和服务器都保存一个秘钥,每次传输都加密,服务端根据秘钥解密。
客户端:
1、设置一个key(和服务器端相同)
2、根据上述key对请求进行某种加密(加密必须是可逆的,以便服务器端解密)
3、发送请求给服务器
服务器端:
1、设置一个key
2、根据上述的key对请求进行解密(校验成功就是「信任」的客户端发来的数据,否则拒绝响应)
3、处理业务逻辑并产生结果
4、将结果反馈给客户端
三、第三方支持
比如spring security-oauth
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)