2014-10-20 2 views
1

GCM을 사용하는 대규모 사용자 기반의 Android 앱이 있습니다. 서버 측 설정 오류로 인해 GCM 등록 DB에 대한 백업이 전혀 없었습니다. (정말 좋지 않습니다!) 이제는 이러한 앱에 메시지를 보낼 방법이 없습니다.GCM 재 등록의 원인은 무엇입니까?

내 질문은 : 어떤 클라이언트 또는 서버 시스템 이벤트로 인해 GCM이 서버에 다시 등록 할 수 있습니까? 예 : 클라이언트 apk 버전 업데이트, 클라이언트 google 서비스 업데이트 등

다른 방법으로 서버가 기본적으로 모든 토큰 등록을 무효화하여 모든 Android 클라이언트가 강제로 재 등록되도록하는 방법이 있습니까?

답변

1

(현재 논리가 아직 수행하지 않은 경우) GCM에 등록하고 서버에 등록 ID를 전송해야하는 앱의 새 버전을 출시해야합니다. 불행히도 새 버전을 설치하는 장치에 대한 등록 ID는 제공되지만 더 나은 방법은 없습니다.

다음 번에 새로운 버전을 요구하지 않고이 문제를 극복 할 수있는 로직을 새로운 앱 버전에 추가 할 수 있습니다. 예를 들어 앱이 실행될 때마다 앱 인스턴스의 고유 ID (등록 ID가 아님)가 포함 된 API 호출을 서버에 보내고 서버가 DB에서 해당 ID를 찾지 못하거나 그와 관련된 등록 ID를 찾지 못하면 앱 인스턴스가 일부 등록 과정을 거치도록 강요합니다. 앱 인스턴스가 강제로 등록 ID를 서버로 다시 보내야합니다. 그래도 앱을 시작하지 않는 기기의 등록 ID를 복원하는 데는 도움이되지 않지만 적어도 모든 활성 사용자의 등록 ID는 복원 할 수 있습니다.

0

이 방법이 어느 정도 가능할지 모르지만 여전히 유용 할 수 있습니다.

  • 앱의 새 버전을 출시해야합니다.

  • GCM에 등록 된 앱이 실행될 때마다 등록 ID를 찾고 getRegistrationId() 기능을 호출합니다. 우리는 앱 데이터 내의 공유 환경 설정에이를 저장합니다.

    private String getRegistrationId(Context context) 
    { 
        final SharedPreferences prefs = getGCMPreferences(context); 
        String registrationId = prefs.getString(PROPERTY_REG_ID, ""); 
    
        if (registrationId.isEmpty()) 
        { 
         Log.i(TAG, "Registration not found."); 
         return ""; 
        } 
    
        int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); 
        int currentVersion = getAppVersion(context); 
    
        if (registeredVersion != currentVersion) 
        { 
         Log.i(TAG, "App version changed."); 
    
         return ""; 
        } 
    
        return registrationId; 
    } 
    
    • 우리는 이미 어떤 PROPERTY_REG_ID여기 (공유의 환경 설정에 registeration ID를 저장하기 위해 특정 키를 사용 : 여기

    은 공식 문서에서 일부 코드입니다 public static final String PROPERTY_REG_ID = "registration_id";으로 정의 됨). 앱이 출시 될 때마다이 키가 있는지 확인합니다.

  • 그래서 내가 제안한 것은 등록 ID에 대해이 공유 환경 설정 키를 변경하는 것입니다.

    확실히

이 공유의 환경 설정에서 찾을 수없는 것와 GCM에서 재 등록을 요청 것입니다와 registerInBackground() 함수를 호출한다.

등록 후 새 공유 기본 키를 사용하여 새 등록 ID를 저장해야합니다.

이 모든 일의 단점은 앱을 업데이트하는 사람들 만의 등록 ID를 얻을 수 있다는 것입니다.

관련 문제