2013-09-26 2 views
3

GAE를 사용하는 Android 애플리케이션을 개발 중이며 인증 된 전화를 걸려고합니다. 나는 모든 것을 작동 시키는데 문제가있다. 권한이 부여 된 함수 (User)의 첫 번째 매개 변수를 검사했을 때 항상 null입니다. 여기 내 안드로이드 코드 :Android에서 GAE 인증을받은 엔드 포인트 User = null

settings = getSharedPreferences("TicTacToeSample", 0); 
    credential = GoogleAccountCredential.usingAudience(this, 
      "server:client_id:504148155997.apps.googleusercontent.com"); 
    credential.setSelectedAccountName(accountName); 

    if (credential.getSelectedAccountName() == null) { 
     startActivityForResult(credential.newChooseAccountIntent(), 2); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       credential.getSelectedAccountName(), 10000).show(); 

     MessageEndpoint.Builder endpointBuilder = new MessageEndpoint.Builder(
       AndroidHttp.newCompatibleTransport(), new GsonFactory(), 
       credential); 

     messageEndpoint = CloudEndpointUtils.updateBuilder(endpointBuilder) 
       .build(); 
    } 


private void setAccountName(String accountName) { 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString("pref", accountName); 
     editor.commit(); 
     credential.setSelectedAccountName(accountName); 
     this.accountName = accountName; 
    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case 2: 
     if (data != null && data.getExtras() != null) { 
      String accountName = data.getExtras().getString(
        AccountManager.KEY_ACCOUNT_NAME); 
      if (accountName != null) { 
       setAccountName(accountName); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putString("pref", accountName); 
       editor.commit(); 
       // User is authorized. 
       Toast.makeText(getApplicationContext(), 
         credential.getSelectedAccountName(), 10000).show(); 
       credential.setSelectedAccountName(accountName); 
       MessageEndpoint.Builder endpointBuilder = new MessageEndpoint.Builder(
         AndroidHttp.newCompatibleTransport(), 
         new GsonFactory(), credential); 

       messageEndpoint = CloudEndpointUtils.updateBuilder(
         endpointBuilder).build(); 
      } 
     } 
     break; 
    } 
} 

그리고 여기 내 GAE입니다 :

09-26 15:55:18.185: E/com.safeandroid.mjmobilesolutions.GCMIntentService(3833): Exception received when attempting to register with server at https://velvety-347.appspot.com/_ah/api/ 
09-26 15:55:18.185: E/com.safeandroid.mjmobilesolutions.GCMIntentService(3833): com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized 
.. 
09-26 15:55:18.185: E/com.safeandroid.mjmobilesolutions.GCMIntentService(3833):  "message" : "com.google.appengine.api.oauth.OAuthRequestException: Not authorized!", 
:

@Api(name = "deviceinfoendpoint", clientIds = { Ids.WEB_CLIENT_ID, 
     Ids.ANDROID_CLIENT_ID }, audiences = { Ids.ANDROID_AUDIENCE }, namespace = @ApiNamespace(ownerDomain = "safeandroid.com", ownerName = "safeandroid.com", packagePath = "mjmobilesolutions")) 
public class DeviceInfoEndpoint { 
... 

@ApiMethod(name = "insertDeviceInfo") 
    public DeviceInfo insertDeviceInfo(User user, DeviceInfo deviceinfo) 
      throws OAuthRequestException { 
     EntityManager mgr = getEntityManager(); 
     if (user != null) 
      deviceinfo.setUser(user); 
     else 
      throw new OAuthRequestException("Not authorized!"); 
     try { 
      if (containsDeviceInfo(deviceinfo)) { 
       throw new EntityExistsException("Object already exists"); 
      } 

      mgr.persist(deviceinfo); 
     } finally { 
      mgr.close(); 
     } 
     return deviceinfo; 
    } 
} 

은 내가 항상 insertDeviceInfo 함수에서 다음과 같은 예외가 내 응용 프로그램을 실행하는거야 때

web_idandroid_id을 자격 증명에 넣으려고했으나 작동하지 않았습니다. 뭐가 문제 야?

+0

이 나를 위해 일했다
credential = GoogleAccountCredential.usingAudience(this, "server:client_id:putHereTheClientIDForWebApplication"); 

, 다른 일들이 올바른 것 같다. Javascript에서 작동하지만 Android에서는 작동하지 않습니다. 아직 해결책을 찾았습니까? – Floris

답변

0

Android 코드에서 잠재 고객은 UI에서 찾을 수있는 "웹 응용 프로그램 용 클라이언트 ID"를 넣으십시오. 나는 정확히 같은 일을 고민하고