Android 구현

다음 예는 Android 클라이언트에서 인스턴스 ID를 구현하는 데 도움이 됩니다. 이 예에서는 GCM 범위를 사용합니다. Google Cloud Messaging이 지원 중단되었으므로 이 범위는 데모 목적으로만 유용합니다.

Google Play 서비스 설정

클라이언트 애플리케이션을 작성하려면 Google Play 서비스 SDK 설정에 설명된 대로 Google Play 서비스 SDK를 사용하세요. Play 서비스 라이브러리에는 인스턴스 ID 라이브러리가 포함되어 있습니다.

인스턴스 ID 가져오기

다음 코드 줄은 인스턴스 ID를 반환합니다.

String iid = InstanceID.getInstance(context).getId();

토큰 생성

토큰을 생성하려면 Google Developers Console에서 생성된 프로젝트 ID가 필요합니다.

String authorizedEntity = PROJECT_ID; // Project id from Google Developer Console
String scope = "GCM"; // e.g. communicating using GCM, but you can use any
                      // URL-safe characters up to a maximum of 1000, or
                      // you can also leave it blank.
String token = InstanceID.getInstance(context).getToken(authorizedEntity,scope);

토큰 및 인스턴스 ID 관리

인스턴스 ID를 사용하면 토큰을 삭제하고 새로고침할 수 있습니다.

토큰 및 인스턴스 ID 삭제

String authorizedEntity = PROJECT_ID;
String scope = "GCM";
InstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

연결된 모든 토큰을 포함하여 인스턴스 ID 자체를 삭제할 수도 있습니다. 다음에 getInstance()를 호출하면 새 인스턴스 ID가 반환됩니다.

InstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();

갱신 토큰

인스턴스 ID 서비스는 주기적으로 (예: 6개월마다) 콜백을 시작하여 앱이 토큰을 새로고침하도록 요청합니다. 다음과 같은 경우에도 콜백을 시작할 수 있습니다.

  • 보안 문제가 있습니다(예: SSL 또는 플랫폼 문제).
  • 기기 정보가 더 이상 유효하지 않습니다(예: 백업 및 복원).
  • 그 외에는 인스턴스 ID 서비스가 영향을 받습니다.

앱에서 인스턴스 ID 리스너 서비스를 구현하여 다음 콜백을 수신합니다.

public class MyInstanceIDService extends InstanceIDListenerService {
  public void onTokenRefresh() {
    refreshAllTokens();
  }

  private void refreshAllTokens() {
    // assuming you have defined TokenList as
    // some generalized store for your tokens
    ArrayList<TokenList> tokenList = TokensList.get();
    InstanceID iid = InstanceID.getInstance(this);
    for(tokenItem : tokenList) {
      tokenItem.token =
        iid.getToken(tokenItem.authorizedEntity,tokenItem.scope,tokenItem.options);
      // send this tokenItem.token to your server
    }
  }
};

프로젝트의 매니페스트 파일에서도 이 서비스를 구성해야 합니다.

<service android:name=".MyInstanceIDService" android:exported="false">
  <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
  </intent-filter>
</service>