wkwebview 쿠기가 공유가 되다 안되다 합니다.

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • oneforall88
      참가자
      • 글작성 : 1
      • 답글작성 : 1

      안녕하세요. ios공부는 따로 해본적 없고 하이브리드 개발을 맡아서 꾸역꾸역 하고 있는 사람입니다.

      저와 비슷한 케이스가 있는걸 보고 사이트에 가입하고 염치없지만 첫글부터 질문글을 남깁니다.

       

      에뮬레이터에서는 다 잘되는것들이 단말기로 돌리면 안되서 정말 미쳐버릴것 같습니다.

      이것때문에 오픈도 못하고 있어요.

      UIWebview가 속도 이슈가 있어 WKWebview로 변경을 했고

      테스트를 했는데 에뮬에서는 쿠키가 잘 저장되고 잘불러와지는데

      아이폰 구형단말기(6,7)에서만 유독 쿠키가 적용이 되다 안되다합니다.

      예) 쿠키 A값을 1을 2로 변경. 될때가 있고 안될때가 있음.

             쿠키 A값을 바꾸면서 A값을 pin으로 저장하는데 가끔 undefined가 들어가는 현상

             쿠키를 삭제 했는데 남아있는현상

      위와 같습니다.

      처음에는 UIWebview의 경우 쿠키가 자동관리 된다고 하여

      웹에서 jquery.cookie를 이용해서 다 처리를 했었습니다.

      그러다 WKWebview로 바꾸면서 아래와 같은 코드를 추가했었습니다.

      applicationWillTerminate와 applicationDidEnterBackground에 saveHTTPCookies

      applicationWillEnterForeground에 loadHTTPCookies

      이렇게도 해보고 viewdidload에도 loadHTTPCookies를 추가해보고 별거 다해봤습니다.

      jquery.cookie에서 $.cookie(“test”, value)와 같이 값을 설정하고 alert으로 불러보면 잘 불러와지지만 앱을 끄면 다시 원복되어 있곤 합니다.

      그래서 setCookie를 만들어 직접 넣어둬 줘봤습니다.

       

      정말 찾아볼거 다 찾아보고 해볼거 다해본거 같습니다. 고수님들 저를 가엽게 여기시어 한번만 도와주세요. ㅠㅠ

      • objective c로 부탁드립니다.

       

      • (void)setCookie: (NSString )name value:(NSString )value

      {

          NSURL* url = HOST_URL;

          NSString *sUrl = url.absoluteString;

          dispatch_async(dispatch_get_main_queue(), ^{

              [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];        

              NSString *urlStr = [url.absoluteString stringByReplacingOccurrencesOfString:@”http://” withString:@””%5D;

       

              NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

              [cookieProperties setObject:@”0″ forKey:NSHTTPCookieVersion];

              [cookieProperties setObject:name forKey:NSHTTPCookieName];

              [cookieProperties setObject:value forKey:NSHTTPCookieValue];

              [cookieProperties setObject:urlStr forKey:NSHTTPCookieDomain];

              [cookieProperties setObject:url forKey:NSHTTPCookieOriginURL];

              [cookieProperties setObject:@”/” forKey:NSHTTPCookiePath];

              [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:3600] forKey:NSHTTPCookieExpires];

              

              NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];

              [webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];

              

              NSData *cookieData = [NSKeyedArchiver archivedDataWithRootObject:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];

              [[NSUserDefaults standardUserDefaults] setObject:cookieData forKey:@”cookieArray”];

              [[NSUserDefaults standardUserDefaults] synchronize];

          });

       

      }

       

       

      -(void)loadHTTPCookies

      {

          NSMutableArray* cookieDictionary = [[NSUserDefaults standardUserDefaults] valueForKey:@”cookieArray”];

       

          for (int i=0; i < cookieDictionary.count; i++)

          {

              NSMutableDictionary* cookieDictionary1 = [[NSUserDefaults standardUserDefaults] valueForKey:[cookieDictionary objectAtIndex:i]];

              NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDictionary1];

              [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

          }

          

          NSLog(@”set cookie”);

          NSData *cookieData = [[NSUserDefaults standardUserDefaults] objectForKey:@”cookieArray”];

          if ([cookieData length] > 0) {

              NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookieData];

              for (NSHTTPCookie *cookie in cookies) {

                  NSLog(@”set Cookie : %@”,cookie);

                  [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

               }

          }

      }

       

      -(void)saveHTTPCookies

      {

          NSLog(@”saveHTTPCookies”);

          NSMutableArray *cookieArray = [[NSMutableArray alloc] init];

          for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {

              [cookieArray addObject:cookie.name];

              NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

              [cookieProperties setObject:cookie.name forKey:NSHTTPCookieName];

              [cookieProperties setObject:cookie.value forKey:NSHTTPCookieValue];

              [cookieProperties setObject:cookie.domain forKey:NSHTTPCookieDomain];

              [cookieProperties setObject:cookie.path forKey:NSHTTPCookiePath];

              [cookieProperties setObject:[NSNumber numberWithUnsignedInteger:cookie.version] forKey:NSHTTPCookieVersion];

              [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

       

              [[NSUserDefaults standardUserDefaults] setValue:cookieProperties forKey:cookie.name];

              [[NSUserDefaults standardUserDefaults] synchronize];

          }

          

          NSData *cookieData = [NSKeyedArchiver archivedDataWithRootObject:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];

          [[NSUserDefaults standardUserDefaults] setObject:cookieData forKey:@”cookieArray”];

          [[NSUserDefaults standardUserDefaults] synchronize];

          

       

      }

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 580

      구형 단말기의 iOS 버전이랑, 지금 Xcode 버전이랑 Deployment target 등의 정보가 있으면 더 도움이 될 것 같아요.

      • oneforall88
        참가자
        • 글작성 : 1
        • 답글작성 : 1

        아이폰6 os 버전 12.5.5

        아이폰7 os 버전 14.x입니다.

        sdk target 버전 말씀하시는거면 9.3이고 12.5로도 해봤습니다.

        xcode는 12.5입니다.

1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom