Как войти в Gmail, используя OAuth в приложении Android?
Я занимаюсь разработкой приложения, в котором используется логин для входа в Gmail. Я прошел все уроки, вопросы stackoverflow, помеченные какOAuth 2.0
и документы, которые доступны в Google и, наконец, в соответствии с инструкциями, приведенными в официальном документе Google дляOAuth 2.0
образец, Я создал Client ID и все, что требуется для установленных приложений, то есть для Android. Все до сих пор работает отлично, и я позвонилWebView
дать разрешение от пользователя, после этого я получилAccesstoken
лайк4/cR7XXXXXXXXXXXXXXX
вWebView
и сказать что-то вродеPlease copy this code,switch to your application and paste it here
Я запутался здесь, я нене знаю, что делать, чтобы вернуться к моему приложению изWebview
Я ищу решение около двух дней, но не могу получить хороший ответ на мою проблему. Вот код, где меня остановили.
Main.java
где пользователь имеетOptionMenu
чтобы залогиниться. Когда пользователь нажимаетWebView
открывается, чтобы войти в Gmail.
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity {
public static String REQUEST = "https://accounts.google.com/o/oauth2/auth?"
+ "client_id=XXXXXXXXXXX-gxxxx.apps.googleusercontent.com&"
+ "redirect_uri=urn:ietf:wg:oauth:2.0:oob&"
+ "scope=https://mail.google.com/mail/feed/atom&"
+ "response_type=code&" + "access_type=online";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 0:
if (requestCode != RESULT_OK || data == null) {
return;
}
String token = data.getStringExtra("token");
if (token != null) {
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Intent intent_obj2 = new Intent(Main.this, Webview.class);
intent_obj2.setData(Uri.parse(REQUEST));
startActivityForResult(intent_obj2, 0);
return true;
}
return super.onOptionsItemSelected(item);
}
}
Webview.java
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Window;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Webview extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_PROGRESS);
final WebView wb_obj = new WebView(this);
setContentView(wb_obj);
wb_obj.getSettings().setJavaScriptEnabled(true);
Intent intent = getIntent();
if (intent.getData() != null) {
wb_obj.loadUrl(intent.getDataString());
}
wb_obj.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
setProgress(newProgress * 10000);
}
});
wb_obj.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
setTitle(url);
System.out.println(url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.out.println("in onPageFinsihed");
/*CookieSyncManager.getInstance().sync();
String s_cookie = CookieManager.getInstance().getCookie(url);
if (s_cookie == null) {
System.out.println(s_cookie);
return;
}else{
String web_title = wb_obj.getTitle().toString();
System.out.println("web tile" + web_title);
if (web_title.equalsIgnoreCase("Request for Permission")) {
} else {
String[] s_webtitle = web_title.split("=", 2);
String access_token = s_webtitle[1].toString();
//System.out.println("Access token" + access_token);
startActivity(new Intent(Webview.this, Main.class));
finish();
}*/
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(Webview.this, Main.class));
}
}
Согласно Webview.java я позвонилfinish()
так что текущая активность убита, но это не происходит в этом приложении, так что я получу токен вonAcitivityResult()
Пожалуйста, поделитесь своими ответами спасибо.