팩트 설명.


0. UIWebView 에 Delegate 연결

0. webView:shouldStartLoadWithRequest:navigationType: 함수 선언

0. [[request URL] absoluteString] 으로 케치

0. 입맛대로 코딩




코딩



클라이언트 -


- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"%@", [request URL].absoluteString);

    

    if ([[request URL].absoluteString isEqualToString:@"appscheme://callNative"]) {

        /// 입맛대로 코딩 ///

 ...

    }

    return YES;

}




웹 -


<script type='text/javascript'>(function callNative(){window.location = 'appscheme://callNative';}());</script>





웹에서 버튼 호출 시 클라이언트가 처리해야 되는 부분이 있으면 이런식으로 호출을 하고 받을 수가 있다.


이건 어려운거 아니니 간단하게 테스트해봐도 된다.





이번에 어플 업데이트 하면서 아주 곤욕을 치룬 코드이다.


보면 아주 간단하지만. 이것때문에 일주일간을 몸져누울뻔했다.



코드는 아래와 같이 간단하게 되어 있다.



NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];

NSString* bundleId = infoDictionary[@"CFBundleIdentifier"];

NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", bundleId]];

NSData* data = [NSData dataWithContentsOfURL:url];

NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

     

if ([lookup[@"resultCount"] integerValue] >= 1){

     NSString* appStoreVersion = lookup[@"results"][0][@"version"];

     NSString* currentVersion = infoDictionary[@"CFBundleVersion"];

         

if (![appStoreVersion isEqualToString:currentVersion]) {

return NO;

}

}

return YES;



위 코드는 일반적으로 구글에서 검색해보면 나오는 코드이다.


여기서 핵심은 


1. [[NSBundle mainBundle] infoDictionary];

2. http://itunes.apple.com/lookup? 에서 받아오는 데이터와 주소


1번 같은경우는 우리가 만든 프로젝트의 BundleId를  가져오는 것이다.

2번은 해당 주소를 호출해 우리가 원하는 데이터를 가져오는 것이다.




그런데 이번에 이 부분을 업데이트 하면서 아주 곤욕을 치룬 일을 공유해본다.



이번에 대대적인 업데이트를 하면서


해당 코드를 추가하고 버전이 다르면 업데이트 팝업창을 호출하는 형식을 만들었다.



그런데!! 이게 왠말인가




 문제점 발견



출시가 되어도 업데이트 팝업창이 나오지 않는 현상을 발견했다.


처음에는 출시되고 동기화가 되는데에 좀 걸릴 수 있지 라고 생각하고 기다려보았다.

보통 출시되고 30분 ~ 2시간 이내에 동기화가 된다.


그래 마냥 기다리면 동기화가 되겠지하고 손놓고 기다리는데 퇴근할때까지 업데이트가 안되는걸 확인하고 


부랴부랴 해당 로그를 확인해본보았다.





현재 버전 : 2.0  

스토어에 업데이트 되는 버전 : 2.1


우선 테스트 한 순서


1. http://itunes.apple.com/lookup?bundleId="com.crazybrain.appstoreversion"

2. http://itunes.apple.com/lookup?id="12341234"

3. http://itunes.apple.com/lookup?bundleId="com.crazybrain.appstoreversion"&id=12341234

4. Mobile 에서 http://itunes.apple.com/lookup?id="12341234" 주소 호출

= Chrome 어플 에서 주소 호출

= Samsung Browser 어플 에서 주소 호출

= Daum 어플 에서 주소 호출

= Naver 어플 에서 주소호출



테스트 결과


1. version="2.0"

2. version="2.0"

3. version="2.1"

4. Mobile = Crhome 어플 [ version= "2.1" ]

= Samsung Browser 어플 [ version="2.1" ]

= Daum 어플 [ version="2.1" ]

= Naver 어플 [ version="2.0" ]



모냐 이거... 왜 다 다르냐... 이해할려고 해도 할 수 가 없는 현상...


* 이거는 읽으신분 중에 혹시 아시는분은 답변좀 달아 주셨으면 한다.




저렇게 불확실한거 그냥 서버에 DB만들어서 내가 버전체크해주는게 속 편하다는 생각에 그냥 서버 통신으로 우회..



그래서 필자는 버전체크를 중요치 않은 앱들은 위 방법을 쓰라고 추천해드리지만. 그게 아니면 내부적으로 버전체크하는게 좋다고 본다.





아.. 보기 좋게 만드는거는 나중에 해야겠다 지금은 자다가 빡침에 글올리느라 그냥 끄적끄적...

오늘은 드디어 Firebase 홈페이지를 들어가서 해보자.


월래는 10분 안에 다 끝나는걸 피곤한 관계로 3번에 걸쳐 하게 되니 정말 어렵게 푸는게 아닌지 하는 생각이 든다.



Firebase : https://firebase.google.com/




파이어 베이스에 가입하는거는 패스하자.

누구나 다 할 수 있는거 가볍게 패스.




 1.  첫 화면 체크





2. 파이어 베이스에 프로젝트 만들기



프로젝트 이름을 입력 후 약관 동의를 하면 로딩 화면이 나오면서 완료가 된다.

이러면 파이어베이스에 프로젝트 만들기 끝.




3. 파이어베이스에 IOS 프로젝트 추가 하기




위와 같이 실행 했으면, 프로젝트 이름이 제대로 되어 있는걸 확인할 수 있다.

그렇다면 바로 다음으로 위에 IOS 버튼이 보일 거다. 가볍게 클릭하자.




클릭하면 위와같은 화면이 나오는데

여기서 가장 중요한건 IOS 번들ID 다. 번들아이디가 다르면 모든게 틀어지기 때문에 잘보고 치자.


입력하고나면 앱등록 버튼이 활성화고 다음으로 넘어가자





다음으로 넘어가면 GoogleService-Info.plist 다운로드 하라고 나오는데 똑같이 따라 해주면 된다.


방금 다운로드한 GoogleService-Info.plist 파일을 Xcode 프로젝트의 루트에 이동하여 대상 전체에 추가하세요.

보기 좋게 위치도 이미지와 같은 위치에 넣어주자. 그래야 나중에 찾기도 쉽다.





추가하고 나면 이제 또 다음으로 넘어가자





다음으로 넘어가니 어디서 많이 본것들이 나오는데

우리는 2018/11/13 - [[ 자기개발 ]/개발에 필요한 정보 정리] - [Firebase] IOS APNS 파이어베이스 연동 - (1) 에서 프로젝트에 미리 했기 때문에 패스




엇! 이것도 프로젝트에 미리 해놨기 때문에 패스


이제 다음으로 누르면 [ 앱이 Google 서버와 통신했는지 확인하는 중입니다. 앱을 제거한 후 다시 설치해야 할 수도 있습니다. ]

라고 이렇게 나오지만 가볍게 이 단계 건너뛰기를 눌러주자.




건너 뛰기 하고 설정에 들어가면 아래와 같은 화면이 나오게 된다.



필요한 정보들은 더 추가하면 되고, 빠르게 넘어가자!

위에 [ 클라우드 메시징클릭!



위에 키들은 나중에 서버 개발하면서 쓰는 것이라고만 알고 패스. 하고 아래 빨간칸을 클릭






클릭 후 아래와 같은 팝업창이 나오는데 여기에 잘넣어야 한다.

긴말하지 않곘다 잘넣어야 한다.







절때 쓰면서 귀찮아서 그러는게 아니다. 

저게 끝이다. 마지막으로 연결을 잘 했는지 확인을 해야하는데


확인은...

왼쪽 사이드 매뉴 하단으로 스크롤 해보면 Cloud Messaging 이 있는데.

여기에서 확인해보면 된다.







끄으으으으읕!


정말 이걸로 끝.. 잘 안되면 어쩔 수 없지만.. 한 90% Key값을 잘못넣어서 잘못된거다.

너무우우우 쉽죠?


이만 와이프라 맥주한잔 하러 가야겠다.. ㅎㅎ

+ Recent posts