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_id
및 android_id
을 자격 증명에 넣으려고했으나 작동하지 않았습니다. 뭐가 문제 야?
, 다른 일들이 올바른 것 같다. Javascript에서 작동하지만 Android에서는 작동하지 않습니다. 아직 해결책을 찾았습니까? – Floris