2014-07-22 3 views
1

Google App Engine에서 실행중인 백엔드로 Android 추가 기능을 개발 중이며 최근 OAuth2 인증을 활성화합니다. 내 문제는 새로 설치하고 사용자가 이전에 Google 계정으로 로그인하지 않은 상태에서 로그인 대화 상자를 표시 한 후 Facebook 버튼으로 login을 눌러 로그인 할 수 있다는 것입니다. Facebook에서 데이터를받은 후 백엔드에 인증 된 전화를 걸면이 문제는 실행되지 않습니다. 앱을 다시 시작한 경우 사용자가 이미 Google 계정으로 로그인하면 모든 것이 정상적으로 작동합니다. 추신 : 두 경우 모두 선택한 계정 이름이 자격 증명에 설정되어 있습니다.Google Cloud Endpoints OAuth 인증

요청이이 경우 전송되지 않는 이유는 무엇입니까? 자격 증명을 만들기위한

코드 :

settings = getSharedPreferences("whostrPrefs", MODE_PRIVATE); 
    credential = GoogleAccountCredential.usingAudience(this, ID); 

    setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

    if(credential.getSelectedAccountName() != null) 
    { 
     //all ok 
     Log.d("AccountName", "Everything is ok!"); 
    } 
    else 
    { 
     Log.d("AccountName", "User needs to loggin!"); 
     chooseAccount(); 
    } 

setSelectedAccount 방법 :

private void setSelectedAccountName(String accountName) 
{ 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString(PREF_ACCOUNT_NAME, accountName); 
    editor.commit(); 

    credential.setSelectedAccountName(accountName); 
    this.accountName = accountName; 
} 

chooseAccount 방법 :

void chooseAccount() 
{ 
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
} 

그리고 onActivityResult를 방법에서 미리보기 :

그리고 실제 전화 : 어떤 문제가있을 수 있습니다에 대한

  Userendpoint.Builder builder = new Userendpoint.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential); 
      Userendpoint service = builder.build(); 

      try 
     { 
     response = service.loginuser(params[0], params[1], params[2], params[3],    longitude,latitude).execute(); 
     } 

어떤 아이디어? 내가 뭐 잘못하고 있니? 코드는 내가 전화를 걸었지만 통과하지 못합니다.

LE : 끝점 호출은 Google App Engine 웹 사이트의 자습서에 표시된대로 Google 로그인 자격 증명을 사용하여 이루어 지지만 어떤 이유로 든 호출이 실행되지 않습니다. 자격 증명없이 호출하면 올바른 권한없는 예외가 발생합니다.

답변

0

클라우드 엔드 포인트의 기본 제공 인증은 Google 로그인 (또는 프로젝트를 생성하는 동안 선택한 인증 유형에 따라 OpenID)에서만 작동합니다.

다른 공급자와 인증하려면 사용자 지정 코드를 작성해야합니다. 페이스 북 인증 정보를 API 매개 변수에 전달하여이 작업을 수행 할 수 있습니다.

+0

아니요, 엔드 포인트 인증을 위해 Google 로그인을 사용하고 있습니다. Facebook 로그인은 사용자의 Facebook 계정에 연결하기위한 것입니다. 내 문제는 사용자가 처음으로 Google 계정을 선택한 다음 요청이 이루어지지 않는다는 것입니다. 앱을 다시 시작하면 모든 것이 정상적으로 작동합니다. – redspider

+0

또는 Google 로그인 또는 다른 유형의 로그인을 사용하지 않고 엔드 포인트에 인증 된 호출을 수행하는 방법이 있습니까? – redspider

+0

은 이벤트 시퀀스 문제와 유사합니다. 의존성 (스크립트)이로드 된 후에 만 ​​API 호출을 트리거해야합니다. 또한 signin 콜백을 사용하십시오. 이벤트를 시퀀싱하는 좋은 방법은 다음 예제 코드에 나와 있습니다. https://developers.google.com/appengine/docs/java/endpoints/consume_js#sample_auth_flow_for_a_javascript_client – Ashish

관련 문제