텍스트큐브(TextCube) 1.9.x로 업그레이드 한 뒤에 모바일 버전 작동이 잘 안되는 증상

 텍스트 큐브를 1.8.6을 쓰다가 1.9.1로 업그레이드 하면서 대대적으로 스킨도 문제 있는 부분 손보기도 하고 그러고 있습니다.

 그런데 신기하게도 스마트폰으로 접속한 사람들이 모바일 인터페이스로 리다이렉트 되지 않고 그냥 데스크탑 인터페이스로 접속하는것을 확인할 수 있었습니다.

 저는 현재 Google Analytics를 사용중이고, 모바일 관련 파일과, 스킨에 추적코드를 삽입해 두었기 때문에 모바일 접속유저가 어떤 인터페이스로 사용중인지 확인이 가능합니다.

 재미있는 부분은 Google Analytics의 모바일 항목만 활성화 시켜서 보고있으면, 어느 순간에는 모바일 인터페이스인 /i/xxx 주소로 모두다 접속되다가 어느순간부터는 다시 데스크탑 모드 주소인 /xxx 주소로 접속되는것이었습니다.

 접속자들이 모바일로 잘 접속하는 동안에 제 아이폰과 넥서스로 블로그를 접속해보면 모바일 인터페이스로 잘 작동되는데, 접속자들이 죄다 데스크탑 모드로 접속하게 될땐, 제 아이폰과 넥서스도 데스크탑 모드로 작동되는것입니다.

 모바일 기기를 전혀 인식하지 못하는건지 확인해보니 그것은 또 아니었습니다.

 모바일 기기로 블로그 접속시 데스크탑 모드로 접속은 되지만, 하단에 모바일 모드로 가는 하단 링크가 활성화 되어있습니다. 그리고 관리자링크를 누르면 정확하게 모바일 인터페이스의 로그인창이 뜹니다.

 마치 누군가가 장난이라도 하는듯이 저절로 데스크탑 모드가 강제되는듯한 현상이 벌어지는것이죠.

 검색을 해봐도 저만 이런 증상이 나타나는것 같고, 해서 파일도 죄다 업로드 해보고 스킨도 초기화해서 하나씩 하나씩 수정해봤으나, 마땅히 정답은 찾지 못했습니다.

 그래도 스마트폰으로 블로그 접속시 데스크탑 인터페이스로 접속되는것은 너무 답답한 상황이었기에 어떻게든 해결해봐야겠다는 생각으로 소스를 뒤적거리기 시작했죠. 정 안되면 1.8.6으로 되돌아 가야죠 ㅠㅠ

 어쨌거나, 모바일을 인식하고 모바일 인터페이스 주소인 blog/i/xxx로 보내는 부분이 두군데 보였습니다.

  첫번째 파일은 /tc/interface/index.php 파일 하나와, /tc/interface/blog/entry.php 이렇게 총 두개부분에 있습니다.

 두파일 모두 동일한 코드인데요, 중초반 부분에 보면 다음과 같은 부분이 있습니다.

[code php]
if(Setting::getBlogSettingGlobal(‘useiPhoneUI’,true) && ($browserUtil->isMobile() == true)
&& (!isset($_GET[‘mode’]) || $_GET[‘mode’] != ‘desktop’)
&& (!isset($_SESSION[‘mode’]) || !in_array($_SESSION[‘mode’],array(‘desktop’)))) {
if(empty($suri[‘value’])) {
header(“Location: $blogURL/i”); exit;
} else {
header(“Location: $blogURL/i/entry/”.$suri[‘value’]); exit;
}
}
[/code]

 이부분이 모바일 기기를 인식하여 모바일 인터페이스로 리다이렉트 시키는 부분인것 같습니다.

 여기서 제가 관심있게 부분은 if구분 중 참거짓 여부를 판단하는 부분입니다. 이부분만 1.8.6에 비해서 상당히 길어진것을 확인하였습니다.

[code php]
if(Setting::getBlogSettingGlobal(‘useiPhoneUI’,true) && ($browserUtil->isMobile() == true)
&& (!isset($_GET[‘mode’]) || $_GET[‘mode’] != ‘desktop’)
&& (!isset($_SESSION[‘mode’]) || !in_array($_SESSION[‘mode’],array(‘desktop’))))
[/code]

 내용을 살펴보면 앞부분의 isMobile() == true 까지는 1.8.6경우와 동일합니다. 그런데 뒷부분이 추가된것인데요, 나머지의 역할은 모바일버전에서 데스크탑 버전으로 인터페이스 변경을 위한 부분입니다.

 모바일로 접속시 하단에 데스크탑 모드로 이동하는 링크가 있는데 이 링크에 mode=desktop 이라는 인자가 붙게 되어있죠. GET부분은 이것을 확인하는 부분으로 생각됩니다.

 두번째는 데스크탑 인터페이스로 강제 이동하기위한 값을 세션에 저장한것을 체크하는것 같습니다. GET방식으로 이동하지 않는 다른글을 볼때도 데스크탑 모드가 유지되도록 하는것 같습니다.

 저는 이중에서 유독 세션처리 부분이 제대로 작동하지 않는것 같았습니다.

 그래서 코드를 다음과 같이 수정해버렸죠
[code php]
if(Setting::getBlogSettingGlobal(‘useiPhoneUI’,true) && ($browserUtil->isMobile() == true) && (!isset($_GET[‘mode’]) || $_GET[‘mode’] != ‘desktop’))
[/code]

 이렇게 처리하니 답답하게 데스크탑 인터페이스로 접속하던 모바일 접속자들이 모두다 정확하게 모바일 인터페이스로 접속하는것을 확인할 수 있었습니다. 제가 가지고 있는 기기들도 역시나 동일했구요.

 GET방식을 유지 함으로서 방문중인 글을 데스크탑 인터페이스로 볼 수 있는 길은 열어두었지만, SESSION방식은 당분간 포기해야할 것 같습니다. 사실 제 블로그는 거의 모두가 신규방문자이고 다른글을 읽는 경우가 거의 없어서 큰 아픔은 없을것 같습니다.

 SESSION관련해서 좀더 공부해서 이것마저 해결을 해보도록 해야겠네요.