XE 공식 자료실

제작자
단희아빠
등록일
2015-05-26
다운로드 수
126
링크1
xepushapp.com

새 글과 새 댓글을 알림받는 안드로이드 푸시 앱을 직접 만들어보세요.

초보자도 쉽게 만들 수 있도록 완벽가이드, 앱 소스가 제공되며,

이 모듈을 통해서 xe 홈페이지와 연동되는 GCM 안드로이드 푸시 앱을 사용할 수 있습니다.

라이선스
GPL v2
설치경로
./modules/androidpushapp
최초 등록일
2015-04-09
전체 다운로드
6,001
체험하기

쉬운설치로 바로 체험할 수 있습니다

상세 설명

앱 제작 완벽 가이드 및 소스는 아래의 링크로 가시면 됩니다.

 

http://blog.naver.com/ubfspringx/220370274049

 

이번에 새롭게 업그레이드 된 앱은 기존의 브라우저 호출 방식을 버리고 웹뷰 방식으로 모바일 웹페이지를 보여주는 하이브리드 앱입니다.

 

그리고 이 앱을 설치한 모든 회원에게 새글과 새댓글, 쪽지를 GCM을 이용하여 푸시알림해주는 앱입니다.

 

일단 웹뷰... 쉬울줄 알았는데 정말 장난이 아니더군요...

 

그래도 웹 브라우저 호출하는 것보다 모양새나 기능면에서 훨씬 좋은 것 같습니다.

 

일단 웹뷰 안에서는 다음을 지원합니다.

 

1) 첨부파일 업로드, 다운로드 / 첨부파일 다운로드 시 wifi 아닐 경우 데이터 요금 부과 알림창 뜸.

 

2) 동영상 재생 및 전체화면 / 동영상 재생시에는 위의 알림창이 뜨지 않음(개발하다 힘들어서 포기했어요ㅡ,.ㅡ;... 주의요망)

 

3) 화면 회전 기능

 

4) 홈 화면에서 back key 누를 때 종료여부 확인창 띄우기

 

5) 로딩 프로그래스바 보여주기

 

6) 해당 홈페이지가 아닌 외부 페이지나 전화번호, 다른 앱 호출시 작동하도록 함.

 

-----------

 

그리고 웹뷰방식을 채택함으로써 아래의 메뉴 버튼생성이 가능해졌습니다.

 

 


 그리고 아래는 알림설정 창의 모습입니다.

 

 

 

 

그리고 이전버전의 앱과 마찬가지로 다음과 같은 기본적인 기능이 있습니다.

 

1) 새 글, 새로운 댓글, 쪽지 푸시 알림 서비스(쪽지의 경우는 커뮤니케이션 모듈이 활성화되어 있어야 합니다)

 

2) 알림여부(새글, 댓글, 쪽지, 소리, 진동) 설정 가능 /


자신이 쓴 글의 댓글이나 자신이 댓글을 단 글에 새 댓글이 달렸을 경우, 자신의 댓글에 대댓글이 달렸을 경우에

 

알림 되도록 설정 가능 /

 

3) 동기화하게 되면 자기가 쓴 글이나 댓글은 알림 안 되도록 함.

 

----------

 

그리고 관리자를 위해 다음의 기능이 제공됩니다.

 

1) 푸시 알림 서비스를 제외할 게시판 설정 가능

 

2) reg_id 자동 정리 및 발송 결과 모듈 관리자 페이지에서 확인할 수 있도록 함.


앱을 삭제하였거나 재설치하였을 때 있게 되는 없는 reg_id와 중복 reg_id 삭제 처리

 

3) 등록기기 목록과 동기화 여부 확인 가능

 

4) 정상작동 여부 확인을 위한 관리자용 테스트 발송기능

 

---------

 

다음은 새글이 달렸을 때 GCM 푸시 알림이 오는 모습입니다.

 



 

1.4버전에서 수정된 점

<모듈기능수정내용>

댓글, 대댓글, 내가 댓글을 단 글의 새로운 댓글 등을 나누어 설정가능하도록 함.

댓글푸시알림시 클릭하면 댓글의 위치로 바로 이동

발송결과 목록에서 테스트, 쪽지는 링크되지 않도록 함.

쪽지 푸시 알림시 알림문구 링크 오류 해결

동기화 회원이 글을 쓰거나 댓글을 썼을 때 자신에게 푸시가 가지 않도록 서버에서 차단(기존에는 앱 자체에서 차단하였음)

잘못된 reg_id 삭제 안되는 오류 해결.

비밀글은 푸시알림이 안되도록 설정

비밀댓글은 글작성자에게만 푸시알림가도록 설정

글을 임시저장했을 때도 푸시알림이 되던 오류 수정

 

<안드로이드 앱 수정>

웹뷰 방식으로 전환

 

 

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

 

 

오류가 있습니다.

androidpushapp.admin.controller.php파일에서 아래에 보면 function procAndroidpushappAdminInsertPushData() 함수가 있는데, 아래의 내용으로 덮어쓰기 해주세요.

 

function procAndroidpushappAdminInsertPushData()
 {

  $oAndroidpushappController = getController('androidpushapp');

  $board_title="테스트";
  $dmember_srl="false";
  $cmember_srl="false";
  $ccmember_srl="false";
  $message_gcm="Test(관리자)";
  $address_gcm="index.php";
  $sort_gcm = 10;
  $type="Test";
  $oAndroidpushappController->pushprocessor($type,$board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);


 }

 

그리고 androidpushapp.controller.php 파일에서 맨 아래쪽에 function pushprocessor() 함수가 있는데, 아래의 내용으로 덮어쓰기 해주시기 바랍니다.

 

function pushprocessor($type,$board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm){
  if($sort_gcm==10){   
   $args->is_admin = "Y";
   $output = executeQueryArray('member.getMemberList',$args);
   foreach($output->data as $data){
    $admin_srl=$data->member_srl;
   }
   $cond->member_srl=$admin_srl;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);

   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);
   

   $args = new stdClass();
   $args->target_title = "Test";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }

  }elseif($sort_gcm==7){

   $cond->member_srl=$dmember_srl;
   $sort_gcm=3;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);

   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = "Secret Comment";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }

  }elseif($sort_gcm!=4){

   unset($gcmRegIds);
   $output = executeQueryArray('androidpushapp.getgcm');
   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = $message_gcm;  
   $args->type = $type;  
   $args->target_url = getNotEncodedFullUrl('', 'document_srl', $address_gcm);  
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }
  }else{
   
   $cond->member_srl=$dmember_srl;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);
   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = "Secret";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }


  }
 }

 

*** 푸시 결과값 목록에 갑자기 아무것도 나오지 않는 현상이 발견되었습니다. 위의 수정작업을 해주시고, 관리자 페이지에서 캐시파일재생성을 하시면 정상작동 됩니다.

 

그리고 비밀댓글의 경우 글작성자에게만 가도록 되어 있어서, 그 비밀 댓글이 대댓글일 때 관련댓글 회원에게도 푸시알림이 가도록 하기 위해 androidpushapp.controller.php 파일에서 하단부분에 있는 function pushprocessor()함수를 다음의 내용으로 덮어써주세요.

 

function pushprocessor($type,$board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm){
  if($sort_gcm==10){   
   $args->is_admin = "Y";
   $output = executeQueryArray('member.getMemberList',$args);
   foreach($output->data as $data){
    $admin_srl=$data->member_srl;
   }
   $cond->member_srl=$admin_srl;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);

   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);
   

   $args = new stdClass();
   $args->target_title = "Test";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }

  }elseif($sort_gcm==7){

   $cond->member_srl=$dmember_srl;
   $sort_gcm=3;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);

   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = "Secret Comment";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }

   $cond->member_srl=$ccmember_srl;   
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);
   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = "Secret Comment";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }

  }elseif($sort_gcm!=4){

   unset($gcmRegIds);
   $output = executeQueryArray('androidpushapp.getgcm');
   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = $message_gcm;  
   $args->type = $type;  
   $args->target_url = getNotEncodedFullUrl('', 'document_srl', $address_gcm);  
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }
  }else{
   
   $cond->member_srl=$dmember_srl;
   $output = executeQueryArray('androidpushapp.getgcmbymem',$cond);
   $send_title = $this->notify($output, $board_title, $message_gcm, $dmember_srl,$cmember_srl,$ccmember_srl,$sort_gcm, $address_gcm);

   $args = new stdClass();
   $args->target_title = "Secret";  
   $args->type = $type;  
   $args->target_url = getUrl('act','dispAndroidpushappAdminList'); 
   $args->push_date = date('YmdHis');
   $args->text = $send_title;
   $args->target_browser = $board_title;
   $args->pushid = md5(date('YmdHis'));
   $output = executeQuery('androidpushapp.insertPush', $args);
   if(!$output->toBool())
   {
    return $output;
   }


  }
 }

 

 

 

 

포럼 1

로그인 후 작성할 수 있습니다.
  • 2015-05-26 12:38:31 제작자 단희아빠

    용초딩님 덮어쓰는 것도 방법이 있기는 하지만, 굉장히 복잡해지고, 차라리 다시 제작하시는 것이 더 빠를거라 생각됩니다. ^^