매주 랭킹을 초기화 해야한다.
좋은 방법이 없을까
- 일단 페이스북에서 제공하는 API가 있다.
앱의 모든 점수 삭제
해당 앱의 앱
access_token
으로 /APP_ID/scores
에 대한 HTTP DELETE
요청을 실행하여 앱의 모든 점수를 삭제할 수 있습니다.
그러면 앱의 점수를 재설정합니다. 게임 점수 및 리더보드를 주기적으로 재설정하려 할 때 사용하세요.
응답은 다음과 같습니다.
설명 | 유형 |
---|---|
삭제 성공 여부에 따라 |
|
이 API를 이용하면 될 것 같은데 일주일에 한 번 서버자체로 해당 코드를 실행 시키도록 해야할 것 같다.
Crontab
[분] [시] [일] [월] [요일] [실행하고자 하는 명령어]
분(0~59), 시(0~23), 일(1~31), 요일 (1~7{월~일})
위와 같은 구조로 실행하고자 하는 명령어를 예약할 수 가 있으며, crontab 을 사용하는 방법에는 두가지가 있습니다.
vim /etc/crontab 을 이용해서 예약하기
위 명령어는 매일 새벽 1시에 sync.php 파일이 실행되도록 한 것입니다.
:wq 명령어를 이용해서 저장하고 나오시면 끝!
해당 방법은 별도의 추가 작업이 필요없으며 그냥 저장하고 나오시면 자동으로 적용이 됩니다.
crontab -e 를 이용해서 예약하기
위 명령어는 월요일 새벽 1시에 sync.php 파일이 실행되도록 한 것입니다.
:wq 명령어를 이용해서 저장하고 나오시면 끝!
해당 방법은 아래와 같은 실행 및 재 시작의 명령어를 추가로 수행해야 합니다.
실행, 종료, 재 시작 명령어
위의 내용을 참고하여 일단 테스트로 * * * * * sh /game/project/test.sh 라고
저장하였다. test.sh엔
echo "Hello World" > hello.txt
가 저장되어있다.
예상대로라면 1분마다 Hello World라고 hello.txt 에 저장해야하는데 아무런 변화가 없다.
crontab -l 을 실행해보니 “no crontab for root” 라고 나온다.
서치결과 "crontab -u root -e” 명령어로 새로운 크론탭을 적용했다.
다시 crontab -l 을 실행하니 제대로 * * * * * sh /game/project/test.sh 가 나왔다.
cat /var/log/cron을 실행해보니 뭔가 1분마다 동작하고 있었지만
여전히 hello.txt파일은 존재하지 않았다. 경로가 잘못된 듯하여 home을 기준으로 절대 경로를 삽입하였다.
* * * * * sh home/user/game/project/test.sh 잘된다.
이어서 일요일에 1번 실행시키기 위해 59 23 * * * php /home/user/game/project/resetRanking.php 를 설정했다.
이제 페이스북 랭킹을 초기화하는 로직만 작성하면된다.
랭킹 초기화하는 페이스북 API 호출하기
먼저 페이스북 PHP SDK를 깔아야한다. 안에 있는 src폴더를 서버에 복사한다.
그리고 mbstring 이라는 php모듈? 을 설치한다. (sudo yum install php56-mbstring) php 버전에 따라 다르게 설치한다. 이것때문에 한참을 해맸다.
이후에 유저 전체의 스코어를 모두 초기화 하는 스크립트를 구현하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once __DIR__ . '/php-graph-sdk-5.0.0/src/Facebook/autoload.php';
$fb = new Facebook\Facebook(['app_id' => ‘xxx',
'app_secret' => ‘xxx',
'default_graph_version' => ‘xxx']);
$fbApp = $fb->getApp(); $fb->delete('/app/scores/', [], $fbApp->getAccessToken());
| cs |
사실 위의 app accesstoken을 어디서 어떻게 가져와야 할지 몰라 한참을 해맸다.
결국 잘되는 것을 확인했다.
이제 웹에서 경로를 통해 php를 실행하는 것을 막아야한다. ( 웹에서 누구나 접근하여 게임의 스코어를 날릴수 있다면 큰일이다. )
여러 방법이 있겠지만
웹에서 접근하지 못하는 경로에 추가하였다.
'All > Project' 카테고리의 다른 글
지금까지 개발된 내용 (0) | 2017.04.08 |
---|---|
Laviah (0) | 2017.04.08 |
UI_ HealthBarUI (0) | 2016.04.12 |
UI_ MyButton (0) | 2016.04.12 |
별게임의 상태트리 (0) | 2016.04.12 |