질문/조언질답게시판

푸시앱을 사용하는데요. XE 시절에는 새글 푸시 발생시 알림센터 알림 숫자 도 즉시 반영하여 동일한 표시를 해주었는데 라이믹스로 바꾸니 라이믹스는 푸시앱에서 넣어준 알림을 캐시가 갱신되지 않으니 모르고 있네요. 캐시 때문인거 같습니다.

 

실제 알림목록에는 있습니다.

 

푸시앱이 라이믹스와 호환이 잘 안되는 거 같은데 푸시앱에서 새글 푸시 직후 알림센터 알림 추가해주는 곳에서 해당 알림 받는 회원이 알림 상태를 새로 갱신하게 해줄 수 있는 방법이 어떻게 해야 하는지 고쳐보고 싶습니다.(XE에서는 문제 없습니다.)

푸시앱에 코드를 추가해줘야 할 것 같은데 푸시앱 문의 시 닶이 없을 것 같아 여기 먼저 올립니다.

  • profile
    아마 푸시앱 모듈에서 executeQuery('ncenterlite.insertNotify', $args); 이런 식으로 알림을 DB에 직접 입력하는 코드가 있을 겁니다. ncenterliteController에 있는 메소드를 호출해야 캐시가 자동으로 갱신될 텐데, 그걸 호출하지 않고 DB를 직접 조작하니 코어의 다른 부분에서는 알림이 왔는지 안 왔는지 알 턱이 없지요.

    XE용 알림센터는 파일을 사용해서 알림 갯수를 캐싱하지만, 라이믹스용 알림센터는 APC, Memcached 등 코어에서 선택한 캐시 방식을 따릅니다. 푸시앱 모듈에서는 아마 XE용 알림센터의 캐시파일 경로를 수동으로 삭제해 주는 방식으로 땜빵하고 있을 것입니다.
  • profile profile
    네. 그럴거 같아서 그부분을 고쳐보고 싶은데 제가 할 수 있을지.. 푸시앱 측에는 과연 반응이 있을지...
  • profile
    푸시앱에서 위의 쿼리를 실행하는 부분 직후의 몇 줄을 살펴보세요.
    아마 캐시파일을 삭제하는 코드가 복붙되어 있을 겁니다.
    그걸 아래와 같이 바꿔줍니다.

    $oNcenterliteController = getController('ncenterlite'); // 위에서 이미 선언했다면 불필요
    $oNcenterliteController->removeFlagFile($member_srl); // 특정 회원의 알림 캐시를 초기화
  • profile profile
    function notify_Ncenterlite($obj, $sort_gcm, $member_srl, $type="none") 라는 함수 안에



    $outputdd = executeQuery('ncenterlite.insertNotify', $args);
    if(!$outputdd->toBool())
    {
    return $outputdd;
    }

    $trigger_notify = ModuleHandler::triggerCall('ncenterlite._insertNotify', 'after', $args);

    $flag_path = _XE_PATH_ . 'files/cache/ncenterlite/new_notify/' . getNumberingPath($args->member_srl) . $args->member_srl . '.php';
    if(file_exists($flag_path))
    {
    //remove flag files
    FileHandler::removeFile($flag_path);
    }



    이런 부분 비슷한게 두번 동작 하네요. 문서번호가 존재할때와 아닐때 두군데 같습니다.
  • profile profile

    네, 그거 맞습니다. $glag_path부터 중괄호 닫는 곳까지의 코드를 대체하시면 되겠네요.
    푸시앱은 똑같은 코드를 조금씩만 바꿔서 여기저기 복붙해 놓은 것이 많으니
    여러 군데를 꼼꼼하게 살펴보시기 바랍니다.

  • profile profile
    그냥 캐시파일 삭제하는건 두고 그 아랫줄에

    $oNcenterliteController->removeFlagFile($args->member_srl;

    요렇게 한줄만 추가해 주는건 어떨까요?
  • profile profile
    XE/라이믹스 겸용으로 쓰시려면 그렇게 하셔도 됩니다.
    라이믹스에서만 쓰신다면 불필요한 디스크 I/O가 발생합니다.
  • profile profile
    네. 완전히 바꾸는거로 시도해보겠습니다.
  • profile profile
    말씀하신대로 했더니 잘됩니다! 감사합니다.
  • profile ?
    웹지기님
    androidpushapp.controller.php

    $oNcenterliteController->removeFlagFile($args->member_srl;
    이 코드를 적용하신건 아니신거죠?

    적용하신 코드와 위치 좀 알려주실 수 있으신가요? ^^;
  • ? profile
    해당 파일에
    function notify_Ncenterlite($obj, $sort_gcm, $member_srl, $type="none")
    의 함수를 검색하시고
    기진곰님께서 알려주신대로

    잘못 작성된
    //$flag_path = _XE_PATH_ . 'files/cache/ncenterlite/new_notify/' . getNumberingPath($args->member_srl) . $args->member_srl . '.php';
    //if(file_exists($flag_path))
    //{
    //remove flag files
    //FileHandler::removeFile($flag_path);
    //}


    위 코드를 모두 주석처리하고

    제대로된 코드
    $oNcenterliteController->removeFlagFile($args->member_srl); 로 대체하시면 됩니다.


    2군데 등장할 것입니다.
  • profile ?

    감사합니다. 덕분에 수정 적용했습니다.

     

    --------------------------------------------

    [ 같은 문제있으신 분 참고 하세요. ]

    androidpushapp.controller.php
    8553 과 8617라인 

    2020-09-21 14,46,45.JPEG