질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

라이믹스 2.0 으로 업데이트를 미뤘던 사이트 미룬 이유가 XE푸시앱에서 백지로 뜨는 문제 때문인데요.

 

더이상 미룰 수 없고 해서 업데이트를 해서 여기 도움을 받아 해결을 해보고자 업데이트를 했습니다.

 

제가 정보를 제공해서 해결을 해서 다른 분들께도 해결법을 제공해줬으면 좋겠네요.

 

서버에는 따로 에러는 발생하지 않습니다.

 

앱에서 로그로 남기는 에러는 아래가 유일한 에러입니다.

 

************ App version ************ 6(1.5)************ App source version ************ 17.09************ CAUSE OF ERROR ************ ****regid error**** [Ljava.lang.StackTraceElement;@93fa370 ************ DEVICE INFORMATION *********** Brand: samsung Device: a50 Model: SM-A505N Id: QP1A.190711.020 Product: a50ks ************ FIRMWARE ************ SDK: 29 Release: 10 Incremental: A505NKSU5CTL1

  • profile
    앱 실행시 실행되는 위젯을 공개해 보겠습니다.

    https://xepushapp.com/board_GsJl64/73951

    앱제작 가이드에 설명에 로그인 부분에 필요한 위젯입니다.


    <?php
    /* Copyright (C) NAVER <http://www.navercorp.com> */
    /**
    * @class login_info
    * @author NAVER ([email protected])
    * @version 0.1
    * @brief Widget to display log-in form
    *
    * $Pre-configured by using $logged_info
    */
    class androidapp_login extends WidgetHandler
    {
    /**
    * @brief Widget execution
    * Get extra_vars declared in ./widgets/widget/conf/info.xml as arguments
    * After generating the result, do not print but return it.
    */
    function proc($args)
    {
    // Set a path of the template skin (values of skin, colorset settings)
    $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
    Context::set('colorset', $args->colorset);
    // Specify a template file
    if(Context::get('is_logged')) $tpl_file = 'login_info';
    else $tpl_file = 'login_form';

    $oAndroidpushappModel = getModel('androidpushapp');
    $config_push = $oAndroidpushappModel->get_androidpushapp_config();

    $setting_default = "N%^N";

    Context::set('change_s', $setting_default);

    // Set a flag to check if the https connection is made when using SSL and create https url
    $ssl_mode = false;
    $useSsl = Context::getSslStatus();
    if($useSsl != 'none')
    {
    if(strncasecmp('https://', Context::getRequestUri(), 8) === 0) $ssl_mode = true;
    }
    Context::set('ssl_mode',$ssl_mode);

    // Compile a template
    $oTemplate = &TemplateHandler::getInstance();
    return $oTemplate->compile($tpl_path, $tpl_file);
    }
    }
    /* End of file androidapp_login.class.php */
    /* Location: ./widgets/androidapp_login/androidapp_login.class.php */







    이하는 스킨 중
    /widgets/androidapp_login/skins/final/login_form.html


    <[email protected]($XE_VALIDATOR_MESSAGE)-->

    <[email protected]($is_iapp == "Y")-->
    <script language="JavaScript">

    window.webkit.messageHandlers.callbackHandler.postMessage("error={$XE_VALIDATOR_MESSAGE}");

    </script>
    <[email protected]>
    <script>

    window.myJs_err.callAndroid_err("{$XE_VALIDATOR_MESSAGE}");

    </script>
    <[email protected]>

    <[email protected]>
    <script>

    window.myJs_reg.callAndroid_start("ok");


    function submit(a,b){

    document.getElementById('id').value = a;
    document.getElementById('pass').value = b;
    document.myform.submit();
    return 'ok';

    }
    </script>
    <[email protected]>


    <form action="{getUrl('','act','procMemberLogin')}" name="myform" method="post" class="ff" ruleset="@login">
    <input type="hidden" name="success_return_url" value="{htmlspecialchars(getRequestUriByServerEnviroment())}" />
    <input type="hidden" name="act" value="procMemberLogin" />
    <input type="hidden" name="keep_signed" value="Y"/>
    <input type="hidden" id="id" name="user_id" value="" />
    <input type="password" hidden id="pass" name="password" value=""/>
    </form>







    이하는

    /widgets/androidapp_login/skins/final/login_info.html


    <[email protected]($is_iapp == "Y")-->
    <script language="JavaScript">

    window.webkit.messageHandlers.callbackHandler.postMessage("success={$logged_info->member_srl}");

    </script>
    <[email protected]>
    <script language="JavaScript">

    window.myJs_reg.callAndroid_reg("{$logged_info->member_srl}","{$logged_info->nick_name}","{$change_s}");

    </script>
    <[email protected]>
  • profile
    지금 의심되는건 앱 실행시 사이트에 등록된 regid 를 확인하지 못해서 앱이 초기 실행단계에서 다음단계로 넘어가지 못하는 고 같은데 라이믹스 버전이 바뀐 상황에서 벌어지는 거라 어딘가 달라진 부분이 라이믹스에 있을텐데 어딘지 감도 안오니...
  • profile
    관리자페이지-> 시스템설정-> 보안설정->Samesite ~CSRF토큰까지 사용하지 않음 혹은 표기하지 않음으로 되어있나요? 해당 부분 설정 올려보세요.
  • profile profile

    보안설정은 모두 아니오로 해서 사용중 이었습니다.

     

     

     

    다운로드.jpg

  • profile profile
    SameSite -> None
    나머지 아니요로 해보세요.
  • profile profile
    동일하게 백지입니다. 서버에 에러로그는 없는거로 봐서 그냥 단말기의 regid를 사이트 db에서 조회할때 그냥 못가져오는 상황인 것 같아요.
  • profile profile

    앱쪽에서 reg_id 는 넘겼지만, 그 이후 reg_id 를 세션이나 그런곳으로 넘겼을때 누락된다던가 그런 현상일지 모릅니다.

     

    아무튼 확인 감사합니다 ( _ _)

     

  • profile
    웹뷰에서 ssl오류가 나면 이런 문제가 발생할 수도 있는 것으로 아는데 혹시 라이믹스 2.0에서 ssl관련 로직에 변경된 부분이 있을까요??
  • profile profile
    Context::getSslStatus() 함수는 여전히 유효합니다. none 또는 always를 반환하고, optional은 삭제되었습니다. 그러나 위의 소스를 보면 none이 아닌 경우 항상 https 주소를 사용하도록 되어 있으니, optional이 삭제된 것과 무관하게 기존과 동일하게 작동할 것으로 보입니다.
  • profile profile

    네. 저 위젯은 로그인 할때, 혹은 로그인 후 성공할때 이용되는 페이지라 사이트 자체가 아예 안뜨는 것과는 크게 상관 없을 것 같습니다.

    ssl 관련 몇군데서 디버그를 찍어도 별 이상은 없어 보이긴 합니다.

     

     

    관리자페이지에서 로그인 하지 않았을 경우 로그인 창 띄우기를 "예" 로 선택하면

    앱실행시 로그인 페이지가 뜨게 됩니다. 

     

    -->> 이때 백지가 아닌 웹이 아닌 앱의 로그인 창이 잘 뜹니다. 로그인도 잘됩니다.( 관리자 페이지에서 로그인으로 동기화 된 것으로 확인) 

    -->> 로그인 후 웹사이트가 표시되어 야 하는데 백지입니다. 

     

    웹뷰에서 컨테츠를 불러오는 것에서 전혀 안되고 있는 것으로 보입니다.

  • profile

    1.9 버전(정상동작) 하는 곳의 푸시앱 모듈에 디버그출력을 함수마다 해보고
    2.0 버전(백지) 에서 푸시앱 모듈에 함수마다 디버그 출력을 함수마다 해봤습니다.

    디버그가 찍히면서 어디 코어를 거쳤는지 라인을 찍어주는데요.
    2.0 백지가 나오는 디버그는 정상보다 디버그가 두개 정도 덜 찍힙니다.

    마지막 경유한 코어의 라인수가 찍힌게
    https://github.com/rhymix/rhymix/blob/master/classes/module/ModuleObject.class.php#L687
    https://github.com/rhymix/rhymix/blob/master/classes/module/ModuleHandler.class.php#L647

    위 두 라인을 경유하는 것으로 찍히는데요.
    위 두 파일에서 변경사항이 푸시앱이 화면을 출력하지 못한 원인이 될 것 같은데 비교를 해도 잘 모르겠습니다.


    https://github.com/rhymix/rhymix/issues/1664#issuecomment-805508891

     

    참고로, 푸시앱에서 요구하는 설치 위젯페이지 3개는 모두 레이아웃 미사용과 모바일뷰 사용 체크를 하게 되어있습니다.

  • profile
    이 질문이 정말 제대로 된 질문이군요, (내용과 상관없는 댓글 죄송합니다 (--)(__)(--)
  • profile

    앱소스

     

    Atachment
    첨부