Skip to content
isdnetworks
Go back

지우고 다시 깔라고 안내했다

앱이 이상하다는 문의에 “지우고 다시 깔아 보세요”라고 답했다. 그 뒤에 “진행 상황이 다 없어졌다”는 말이 돌아왔다.

Table of contents

Open Table of contents

저장 위치

진행 상황을 어디에 저장하고 있었는지부터 봤다.

CCUserDefault::sharedUserDefault()->setIntegerForKey("stage", 12);

이게 Android 에서 어디로 들어가는지 CCFileUtils_android.cpp 를 열어 봤다. getWriteablePath()/data/data/ 에 패키지 이름을 붙여 돌려준다.

/data/data/<패키지>/UserDefault.xml

앱 폴더 안이었다. 앱을 지우면 같이 지워진다.

지우고 다시 까는 것은 앱만 새로 까는 것이 아니라 그 앱이 가진 것을 다 지우는 것이었다. 그걸 모르고 안내했다.

안내 문구를 고쳤다

이미 그렇게 한 사람들이 있었고 되돌릴 방법이 없었다. 할 수 있는 것은 다음 사람에게 같은 안내를 안 하는 것뿐이었다.

(이전) 앱을 지우고 다시 설치해 보세요.
(수정) 앱을 완전히 종료한 뒤 다시 실행해 보세요.
       그래도 안 되면 문의 주십시오. 재설치는 진행 상황이 지워집니다.

무엇이 없어지는지 모르고 안내한 것이 문제였다. 조치를 안내하기 전에 그 조치가 무엇을 지우는지 먼저 봐야 했다.

서버에도 남기게 했다

진행 상황이 기기에만 있으면 앱을 지울 때뿐 아니라 기기를 바꿔도 없어진다. Android 에는 BackupAgent 로 계정에 올려 두는 길이 있는데, 복원 시점을 우리가 못 정해서 안 골랐다.

void GameData::sync() {
    Json::Value body;
    body["device_id"] = getDeviceId();
    body["stage"] = m_stage;
    body["coin"] = m_coin;
    HttpClient::post("/api/save", body);
}

다시 깔아도 같은 기기면 받아 올 수 있다. ANDROID_ID 를 기기 이름으로 썼다. 기기를 바꾸면 못 찾는데 그건 계정을 만들어야 하는 이야기다. 그때는 못 했고 대신 무엇이 안 되는지 적어 뒀다.

Environment.getExternalStorageDirectory() 아래에 두는 방법도 봤다. 거기 두면 앱을 지워도 파일이 남는다. 그런데 SD 카드는 FAT 라 권한이 없다. 다른 앱도 읽고 쓴다. WRITE_EXTERNAL_STORAGE 를 받아야 하고 카드가 없는 기기도 있다. 지워도 남는다는 이유 하나만으로 고를 자리가 아니었다.

무엇이 어디에 있는지도 적어 뒀다.

진행 상황(스테이지·코인)   UserDefault.xml. 앱 삭제 시 사라짐. 서버에도 올림
설정(소리·진동)            UserDefault.xml. 앱 삭제 시 사라짐. 서버에 안 올림
받은 이미지 캐시           cache 폴더. 시스템이 지울 수 있음

적어 두니 “지우고 다시 깔면 무엇이 없어지는가”에 조사 없이 답할 수 있게 됐다.

지워지기 전에 물어보게 했다

같은 눈으로 앱 안을 보니 “초기화” 버튼이 바로 지우고 있었다.

void SettingLayer::onResetClicked() {
    GameData::getInstance()->reset();
}

실수로 누르면 끝이다. 확인을 누른 뒤에만 지우게 바꿨다.

이 판에는 물어보는 상자가 없었다. CCLayer 를 하나 더 얹고 CCMenuItemImage 둘을 두는 식으로 만들었다.

void SettingLayer::onResetClicked() {
    ConfirmLayer* c = ConfirmLayer::create(
        "진행 상황이 모두 지워집니다.", this, menu_selector(SettingLayer::doReset));
    addChild(c, 100);
}

덮는 레이어의 CCLayer::setIsTouchEnabled 를 켜서 뒤쪽 버튼이 안 눌리게 했다.

이미 없어진 사람들에게는 복구해 줄 것이 없었다. 대신 문의를 준 사람의 진행 상황을 관리 화면에서 직접 넣어 주는 자리를 만들었다. 누가 언제 무엇을 넣었는지 기록이 남게 했다. 안 남기면 나중에 이상한 값이 나왔을 때 못 찾는다.

정리


Share this post on:

Previous Post
재기동하니 세던 값이 사라졌다
Next Post
한 곳만 고쳤더니 다른 길에서 또 났다