1
我在SignActivity使用Google SignIn如下:为什么我无法创建日历?
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.requestProfile()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
// [END build_client]
SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setScopes(gso.getScopeArray());
现在我能得到令牌,电子邮件名称和其它信息。
而且我也跟着this example在下面我的其他活动,以创建指定的电子邮件日历:
//for calendar start
static final int REQUEST_ACCOUNT_PICKER = 1000;
static final int REQUEST_AUTHORIZATION = 1001;
static final int REQUEST_GOOGLE_PLAY_SERVICES = 1002;
private static final String PREF_ACCOUNT_NAME = "accountName";
private static final String[] SCOPES = { CalendarScopes.CALENDAR };
GoogleAccountCredential mCredential;
com.google.api.services.calendar.model.Calendar calendar;
//for calendar end
@Override
protected void onCreate(Bundle savedInstanceState) {
...
createBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// I take the email from my sign activity.
String emailName = SignActivity.getPref(PREF_ACCOUNT_NAME, getApplicationContext());
mCredential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(), Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff())
.setSelectedAccountName(emailName);
if (isDeviceOnline()) {
new MakeRequestTask(mCredential).execute();
} else {
descriptionEditText.setText("No network connection available.");
}
}
});
...
}
和我MakeRequestTask构造:
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
mService = new Calendar.Builder(
transport, jsonFactory, credential)
.setApplicationName("Test")
.build();
,并和我的问题是在doInBackground功能在在try块中的第一行它不能执行和做其他代码,但奇怪我没有得到任何错误:
try{
com.google.api.services.calendar.model.Calendar createdCalendar = mService.calendars().insert(calendar).execute();
CalendarListEntry calendarListEntry = new CalendarListEntry();
calendarListEntry.setId(createdCalendar.getId());
calendarListEntry.setBackgroundColor(backGroundColor);
calendarListEntry.setForegroundColor(foreGroundColor);
// Insert the new calendar list entry
CalendarListEntry createdCalendarListEntry = mService.calendarList().insert(calendarListEntry).execute();
Log.i("summary", createdCalendarListEntry.getSummary());
}catch (IOException e){
Log.i("test1", e.getMessage());
}
你有没有试过Google的这个快速入门? https://developers.google.com/google-apps/calendar/quickstart/android – Andres
是的,它的工作,但这使我再次登录,但我已经登录。我创建Web应用程序OAuth 2.0客户端ID为GoogleSignInOptions获得ID令牌。这是一个问题吗? – melomg
Google Play服务8.3上的登录功能发生了一些变化 - http://android-developers.blogspot.com/2015/11/whats-new-in-google-play-services-83.html – Andres