面试总结一

面试总结一

image

在Cookie目录下两个文件比较重要
Cookie.binarycookies
<appid>.binarycookies
两者的区别是<appid>.binarycookies是NSHTTPCookieStorag文件对象
Cookie.binarycookies是WKWebView实例化对象

这就是WKWebview 和 NSHTTPCookieStorage 的原因——因为被保存在不同的文件当中

WKWebview Cookie 如何工作的

1.当webView loadRequest或者302或者webView加载完毕,触发了ajax请求时,WKWebView所需的Cookie会去Cookie.binarycookies里读取本域名下的Cookie,加上WKProcessPool持有的Cookie一起作为request头里的Cookie数据

如何传递cookie

let cooki = "document.cookie = '这里是你需要的cookie值'
let userContentController = WKUserContentController()       
let userScript = WKUserScript(source: cooki, injectionTime:WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)    

userContentController.addUserScript(userScript)       

let config = WKWebViewConfiguration()       
config.userContentController = userContentController    
   
var url = URLRequest(url: URL(string: sqlUrl)!, cachePolicy: URLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: 20)       

webV = WKWebView(frame: UIScreen.main.bounds, configuration: config)

cookie

第一次拿到cookie

NSString *cookieStr = [self setupCookie];  //保持APP登录状态同步到web
WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource:cookieStr injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[configuration.userContentController addUserScript:cookieScript];
- (NSString *)setupCookie
{     NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary];
      NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
      NSString *currentHostUrl = [IQHAPIService apiBaseUrlString];;
      NSString *hostDomin = [currentHostUrl stringByReplacingOccurrencesOfString:@"http://mobile" withString:@""];
      for (NSHTTPCookie *cookie in [cookieJar cookies]) {
          if ([hostDomin isEqualToString:cookie.domain]) {
             [cookieDic setObject:cookie.value forKey:cookie.name];
          }
      }
      NSString *sessionType = @"APPSESSIONID";
      NSString *cookieStr = @"";
      for (NSString *key in cookieDic) {
          if([key isEqualToString:@"SESSION"]){
              NSString *appendString = [NSString stringWithFormat:@"'%@=%@;path=/';",sessionType,[cookieDic valueForKey:key]];
              cookieStr = [NSString stringWithFormat:@"%@document.cookie=%@",cookieStr,appendString];
          }
      }
      return cookieStr;
}

5.远程推送原理

面试总结一

Provider是自己程序的后台服务器,APNS是Apple Push Notification Server的缩写,苹果推送服务器
分为三个阶段
1.应用程序的服务端把要发送的信息,目的iPhone的标识打包,发送给APNS
2.APNS在自身的已注册Push服务的iPhone列表中,查找相应标识的iPhone,并把消息发送到iPhone
3.iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知

面试总结一

APNS推送通知的详细工作流程

1.应用程序注册APNS消息推送
2.iOS从APNS获取deviceToken 应用程序接受deviceToken
3.应用程序将device token发送给程序的PUSH服务器程序
4.服务端程序向APNS服务发送消息
5.APNS服务奖消息发送给iPhone应用程序

由于直接生成的证书windows系统是不识别的,所以我们需要生成一个后缀为pem的带证书带秘钥的文件

1.把.cer的ssl证书转换为.pem文件
openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
2.把私钥Push.p12证书转换为.pem文件
openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
3.把生成的两个pem文件再生成一个pem文件 把证书和私钥整合到一个文件里
cat PushChatCert.pem PushChatKey.pem > ck.pem
4.测试证书是否工作
telnet gateway.sandbox.push.apple.com 2195
5.使用SSL证书和私钥来设置一个安全的链接去链接苹果服务器
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
6.建立推送
在AppDelegate里didFinishLaunchingWithOptions函数里写

  • (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    //推送的形式:标记,声音,提示
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
    return YES;
    }

  • (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
    NSLog(@”regisger success:%@”,pToken);
    //注册成功,将deviceToken保存到应用服务器数据库中
    }

  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    NSLog(@”userinfo:%@”,userInfo);

    NSLog(@”收到推送消息:%@”,[[userInfo objectForKey:@”aps”] objectForKey:@”alert”]);
    }

  • (void)application:(UIApplication *)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@”Registfail%@”,error);
    }

文章均来自互联网如有不妥请联系作者删除QQ:314111741 地址:http://www.mqs.net/post/11211.html

相关阅读

  • 淘宝怎么运营推广(中小卖家必学的操作思路)

    淘宝怎么运营推广(中小卖家必学的操作思路)

    淘宝在很长一段时间内,一直被认为是中国最大的电子商务平台。人们在这里购物,与在别处购物一样,会感觉到很便捷、很实惠。因此,随着电商行业的发展。如今,淘宝网站的活跃用户数已经超过了1亿人(目前该数据仅统计了部分用户)。而作为一个淘宝...

    2025.12.09 14:15:37作者:iseeyuTags:运营
  • 如何保证缓存和数据的双写一致性

    如何保证缓存和数据的双写一致性

    image 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇...

    2025.12.09 09:28:14作者:iseeyu
  • 【百度搜索引擎优化】如何快速了解百度搜索引擎优化的知识?(搜索引擎优化基本)

    【百度搜索引擎优化】如何快速了解百度搜索引擎优化的知识?(搜索引擎优化基本)

    在百度输入SEO优化,下拉框就有很多关键词,SEO优化工具,SEO查询,SEO技巧,SEO优化方案,SEO报价,SEO优化教程,SEO优化软件,SEO优化怎么做,等等,相关搜索也有很多长尾关键词。还可以加入一些群,找些大牛问下,向这些大牛学...

    2025.12.09 07:37:38作者:iseeyu

添加新评论