package com.baidu.push.example;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
/**
* 登录百度账号初始化Channel的Activity
*/
public class LoginActivity extends Activity {
/** log tag. */
private static final String TAG = LoginActivity.class.getSimpleName();
private WebView mWebView;
/** redirect uri 值为"oob" */
private static final String REDIRECT = "oob";
/** 开发中心 */
static final String DEV_CENTER = "https://openapi.baidu.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(LoginActivity.this);
setContentView(mWebView);
initWebView(mWebView);
getAccessToken();
}
/**
* 获取 access token的url
*/
private void getAccessToken() {
String url = DEV_CENTER + "oauth/2.0/authorize?"
+ "response_type=token"
+ "&client_id=" + Utils.getMetaValue(LoginActivity.this, "api_key")
+ "&redirect_uri=" + REDIRECT
+ "&display=mobile";
Log.d(TAG, "GetAccessTokenUrl: " + url);
mWebView.loadUrl(url);
}
/**
* 设置Webview的WebviewClient
* @param webview webview
*/
private void initWebView(WebView webview) {
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
if (url.startsWith(REDIRECT) || url.contains("login_success")) {
// change # -> ?
int fragmentIndex = url.indexOf("#");
url = "http://localhost/?" + url.substring(fragmentIndex + 1);
// 从URL中获得Access token
String accessToken = Uri.parse(url).getQueryParameter("access_token");
Log.d(TAG, ">>> Get Original AccessToken: \r\n" + accessToken);
Toast.makeText(LoginActivity.this, "get access token success", Toast.LENGTH_SHORT).show();
// ͨ登录
Intent intent = new Intent(Utils.ACTION_LOGIN);
intent.setClass(LoginActivity.this, PushDemoActivity.class);
intent.putExtra(Utils.EXTRA_ACCESS_TOKEN, accessToken);
startActivity(intent);
finish();
}
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (goBack()) {
return true;
}
}
return super.onKeyDown(keyCode, event);
}
private boolean goBack() {
WebView webView = mWebView;
if (webView != null && webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
}