0

https://developers.google.com의 가이드 라인을 사용하여 프로젝트에서 GCM을 구현했습니다. IntentService를 확장> 클래스 GCMRegistrationIntentService 및 내 mainActivity에서 시작된다 -기기 토큰이 백그라운드에서 업데이트 될 때 알림을 수신하지 않습니다.

: 장치 토큰을 수신

  1. : 나는 포획이

    단계입니다.

    -> 내가 사용한이 서비스에 : 나는 성공적으로 토큰을받은

    InstanceID instanceID = InstanceID.getInstance(getApplicationContext()); 
    token = instanceID.getToken(AppConstants.SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
    

    .

  2. LocalBroadcastListener 내 주요 활동 내에서 1 단계에서 생성 된 토큰을 가져 와서 공유 환경 설정 (내 메시지 서버로 보내기)에 저장하십시오.

  3. 클래스 GCMTokenRefreshListenerServiceInstanceIDListenerService을 확장하여 오래된 만료시 토큰을 얻습니다. 이 경우

    1. 를 호출 할 GCMTokenRefreshListenerService : -

      이에서> 나는 이제 내 질문은

    onTokenRefresh()GCMRegistrationIntentService에 전화를했다?

  4. instanceID 란 무엇입니까? instanceID의 수명주기 란 무엇입니까?

    ./adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n package.name/service.name. 
    

    날 때마다 새 토큰을 주었다

  5. 내가 사용하는 단말기에서 서비스를 달렸다. 이 새로 생성 된 토큰을 공유 환경 설정에 어떻게 저장합니까?

  6. 이 서비스에서 새 토큰을 받으면 토큰이 변경되어 알림을받지 못합니다. 토큰을 업데이트하려면 앱을 열어야합니다. 이 토큰을 업데이트하는 방법?

  7. 토큰을 받기 위해 앱을 열 때마다 GCM을 호출해야합니까?
+0

어떤을 처리 할 것 매니페스트 나머지 부분에서 제대로 서비스를 지정해야 푸시 알림에 필요한 서비스를 호출하거나 시작할 필요가 없어요 대신 최신 버전 ([FCM] (https://firebase.google.com/docs/cloud-messaging/))을 구현하지 않는 이유는 무엇입니까? –

답변

3
  1. 당신은 호출 할 필요가 없습니다 당신의 GCMTokenRefreshListenerService 토큰을 새로 고칠 때마다 안드로이드 시스템에 의해 자동으로 호출된다.

  2. 인스턴스 ID는 앱 인스턴스별로 고유 한 ID를 제공합니다. 그것에 대해 자세히 알아보십시오 here.

  3. 먼저 토큰을 새로 고칠 때마다 자동으로 호출되므로 서비스를 실행할 필요가 없습니다. 서버에 토큰을 보내려면 별도의 서비스 인 RegistrationService을 호출해야합니다. SharedPreference에 토큰을 저장하려면 토큰을 받으면 RegistrationService에서 토큰을 저장할 수 있습니다.

  4. GcmListenerService에서 알림을받지 못합니다.이 서비스는 서버가 푸시 알림을 통해 데이터를 보내는 경우에만 호출됩니다. 토큰이 변경/새로 고침 될 때마다 onTokenRefresh() 방법으로 전화를받습니다. RegistrationService을 사용하여 알림을 제대로 받으려면 서버가이 새 토큰을 인식하도록해야합니다. 그리고 새로 고친 토큰을 얻기 위해 앱을 열 필요가 없습니다.

  5. 없음 당신은 단지 모든 일이 안드로이드 시스템

+0

깔끔하게 설명했습니다. 잘 했어. :디 –