0

Amazon Cognito Sync를 사용하여 내 사용자에 대한 정보를 원격 저장 및 검색하고 모든 정보를 동기화하려고합니다. 해당 사용자가 로그인 한 장치Google 로그인 및 Firebase 클라우드 메시징을 사용하는 Amazon Cognito 푸시 동기화 : 데이터 세트를 구독하지 못했습니다.

데이터 세트 개체를 만드는 방법과 get(), put() 및 synchronize() 메서드를 사용하는 방법을 보여주는 자습서 here을 따르고 있습니다.

작업을 시작한 후, 밀어 넣기 알림을 위해 장치를 등록하고 이후에 계속 동기화하려는 데이터 집합에 가입하는 방법을 보여주는 자습서 here을 사용해 보았습니다. 그러나, 나는 호출 할 때

cognitoSyncManager.subscribeAll() 

나는 다음과 같은 예외가 :

내 안드로이드 응용 프로그램에서
com.amazonaws.mobileconnectors.cognito.exceptions.SubscribeFailedException: Failed to subscribe to dataset 
    at com.amazonaws.mobileconnectors.cognito.internal.storage.CognitoSyncStorage.subscribeToDataset(CognitoSyncStorage.java:360) 
    at com.amazonaws.mobileconnectors.cognito.DefaultDataset.subscribe(DefaultDataset.java:604) 
    at com.amazonaws.mobileconnectors.cognito.CognitoSyncManager.subscribe(CognitoSyncManager.java:332) 
    at com.amazonaws.mobileconnectors.cognito.CognitoSyncManager.subscribeAll(CognitoSyncManager.java:319) 
Caused by: com.amazonaws.services.cognitosync.model.ResourceNotFoundException: Failed to subscribe to dataset USER_INFORMATION, endpointArns do not exist (Service: AmazonCognitoSync; Status Code: 404; Error Code: ResourceNotFoundException; Request ID: 7e681e01-a872-11e7-9e5f-01c7f0419773) 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) 
    at com.amazonaws.services.cognitosync.AmazonCognitoSyncClient.invoke(AmazonCognitoSyncClient.java:864) 
    at com.amazonaws.services.cognitosync.AmazonCognitoSyncClient.subscribeToDataset(AmazonCognitoSyncClient.java:663) 
    at com.amazonaws.mobileconnectors.cognito.internal.storage.CognitoSyncStorage.subscribeToDataset(CognitoSyncStorage.java:357) 
    at com.amazonaws.mobileconnectors.cognito.DefaultDataset.subscribe(DefaultDataset.java:604)  
    at com.amazonaws.mobileconnectors.cognito.CognitoSyncManager.subscribe(CognitoSyncManager.java:332)  
    at com.amazonaws.mobileconnectors.cognito.CognitoSyncManager.subscribeAll(CognitoSyncManager.java:319)  

, 나는 나에게 내가 필요로하는 토큰을 제공합니다 구글 로그인을 사용하여 사용자를 인증하고있어 내 Cognito Credentials Provider를 만들 때 Firebase Cloud Messaging을 사용하여 Cognito Sync Manager에 필요한 토큰을 얻고 있습니다. 다음은 예외로 나타나는 코드의 일부입니다.

new Thread(new Runnable() 
{ 
    @Override public void run() 
    { 
     CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getContext(), Utilities.getString(R.string.aws_cognito_identity_pool_id), Regions.US_EAST_1); 

     Map<String, String> loginsMap = new HashMap<>(); 

     loginsMap.put("accounts.google.com", GoogleLoginManager.getInstance().getToken()); 

     credentialsProvider.setLogins(loginsMap); 

     credentialsProvider.refresh(); 

     cognitoId = credentialsProvider.getIdentityId(); 

     isLoggedIn = !cognitoId.equals(""); 

     if(isLoggedIn) 
     { 
      CognitoSyncManager cognitoSyncManager = new CognitoSyncManager(getContext(), Regions.US_EAST_1, credentialsProvider); 

      try 
      { 
       cognitoSyncManager.registerDevice("GCM", FirebaseInstanceId.getInstance().getId()); 
      } 
      catch(RegistrationFailedException exception) 
      { 
       Log.e(exception); 
      } 
      catch(AmazonClientException exception) 
      { 
       Log.e(exception); 
      } 

      if(cognitoSyncManager.isDeviceRegistered()) 
      { 
       try 
       { 
        cognitoSyncManager.subscribeAll(); 
       } 
       catch(SubscribeFailedException exception) 
       { 
        Log.e(exception); 
       } 
       catch(AmazonClientException exception) 
       { 
        Log.e(exception); 
       } 
      } 
     } 
    } 
}).start(); 

내가 뭘 잘못하고 있는지 아는 사람이 있습니까? 자습서를 따라하고 개발자 콘솔을 탐색하는 것은 나에게는 약간의 수수께끼 였고, 내가 얻지 못하는 몇 가지 핵심 개념이 있어야 할 것처럼 느껴졌다.

답변

0

나는 그것을 마침내 발견했습니다. cognitoSyncManager.registerDevice()을 호출 할 때 FirebaseInstanceId.getInstance().getToken() 대신 토큰으로 FirebaseInstanceId.getInstance().getId()을 전달했습니다. 블레.

또한 cognitoSyncManager.registerDevice("GCM", FirebaseInstanceId.getInstance().getId());으로 전화하기 전에 cognitoSyncManager.unregisterDevice()으로 문의하십시오. 앱 실행 이전에 registerDevice()을 호출하고 등록이 실제로 성공하지 못했다면 CognitoSyncManager 클래스는 여전히 등록 된 SharedPreferences에 저장하므로 registerDevice()에 대한 이후의 모든 호출은 unregisterDevice()이 호출 될 때까지 차단됩니다.