2013-10-07 8 views
0

서버에서 페치하여 프로젝트 발신자 ID를 동적으로 설정하려하지만 잘못된 발신자 ID 예외가 발생합니다. 나는 기본 응용 프로그램 클래스의 서버에서 보낸 사람 ID를 가져 와서 응용 프로그램이 시작되기 전에 가져오고 GCMIntentService의 getSenderIds() 메서드를 재정의했는지 확인합니다.GCM에서 동적으로 SENDER_ID 설정

public GCMIntentService() { 
     super(); 
    } 

    @Override 
    protected String[] getSenderIds(Context context) { 
     String[] ids = new String[1]; 
     ids[0] = SENDER_ID; 
     return ids; 
    } 

하지만 잘못된 발신자 ID 예외가 발생합니다. 어떤 사람이 서버로부터 다이너믹하게 발신자 ID를 설정하는 방법에 대한 충분한 정보를 얻을 수 있다면 정말 고맙겠습니다.

+0

언제 예외가 발생합니까? GCMBaseIntentService 코드에서 볼 수 있듯이 getSenderIds 메소드는 실패 후 GCM에 등록하려고 할 때만 사용됩니다. 처음 GCM에 등록한 코드에는 영향을주지 않습니다. 두 곳에서 동일한 발신자 ID를 사용하고 있습니까? – Eran

+0

예 저는 모든 곳에 동일한 ID를 사용하고 있습니다. GCMIntentService의 생성자는 보낸 사람 ID를 사용합니다. 예외가 던져지는 곳. Java doc이 동적 ID 용으로 사용해야한다는 이유로 빈 super() 생성자를 사용하고 있습니다. –

답변

1

좋아, 내가 그걸 내 스스로 할 수 있었다. 나는 그것을 설명하려고 노력할 것이다.

 @Override 
    protected String[] getSenderIds(Context context) { 

      updateSenderIdTask(context); 
      String[] ids = new String[1]; 
      ids[0] = getSenderId(context); 
      return ids; 
    } 

이전에 본인은 updateSenderIdTask 방법 안에 설정 유용한 변수로 SENDER_ID [0] ID를 설정했다 : 따라서, 우선 전 getSenderIds 이런() 메소드를 편집. GCM이 updateSenderIdTask 메소드가 실행되기 전에 SENDER_ID 변수에 액세스하여 기본 애플리케이션 클래스 내부에서 호출 했더라도 유효하지 않은 발신자 ID 예외가 발생했습니다. 그래서 getSenderIds가 재정의 된 메소드 내에서 updateSenderTask를 호출하여 GCM이 서버를 사용하기 전에 서버에서 ID를 가져와야합니다. 그것을 다시 확인하기 위해, 나는 ids [0]을 로컬 메소드 인 getSenderId로 설정했다.

static String getSenderId(Context context) { 

      CustomSharedPrefs prefs = CustomSharedPrefs.getInstance(context); 
      if (prefs.getString(Constants.SENDER_ID).equals("0") 
        || prefs.getString(Constants.SENDER_ID) == null) { 
       updateSenderIdTask(context); 
      } 
      Log.e("returned sender_id", prefs.getString(Constants.SENDER_ID)); 
      return prefs.getString(Constants.SENDER_ID); 

} 

updateSenderIdTask 메소드는 서버에서 ID를 가져 와서 공유 환경 설정 변수에 저장합니다.