まず、ユーザーがユーザー名とパスワードを入力する URL をロードすると、そのページが自分のページにリダイレクトされ、取得する必要がある「コード」と「状態」が送信されます。認可トークン。を使用してそのコードを取得しようとしていますJavascriptInterface
が、残念ながら何も受信していません...問題があります。コードも状態も取得できないのはなぜですか?
いくつかのコード:
私のアンドロイド側:
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
web_view = (WebView) findViewById(R.id.web_view);
web_view.getSettings().setJavaScriptEnabled(true);
web_view.addJavascriptInterface(new IJavascriptHandler(this),
"AndroidBridge");
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
progressBar = ProgressDialog.show(LoginActivity.this,
"Authentication", "Loading...");
web_view.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
alertDialog.setTitle("Error");
alertDialog.setMessage(description);
alertDialog.setButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
return;
}
});
alertDialog.show();
}
});
web_view.loadUrl(authorizationURL);
}
public class IJavascriptHandler {
LoginActivity activity;
public IJavascriptHandler(LoginActivity activity) {
this.activity = activity;
}
@JavascriptInterface
public void sendToAndroid(String code, String state) {
// this is called from JS with passed value
try {
Log.v("LOGIN CODE + state", code + " " + state);
} catch (Exception e) {
Log.v("LOGIN ERROR", ":(");
e.printStackTrace();
}
}
}
ウェブ側:
<?php
if(isset($_GET['code'])){
echo "<html>
<body>
<script type=\"text/javascript\">
if(window.AndroidBridge){
window.AndroidBridge.sendToAndroid(" . $_GET["code"] . ", " . $_GET["state"] . ");
}
else {
alert(\"Error\");
}
</script>
<p>Success!</p>
<p>" . $_GET["code"] . "</p>
<p>" . $_GET["state"] . "</p>
</body>
</html>
";
}
?>
注: このページにはいくつかの印刷 HTML があるため、コードと状態の両方を取得していますが、関数 sendToAndroid が正しく動作していないか、Java で何かが発生している可能性があります...両方のif
条件が true です。
ログ出力:
09-25 15:55:07.257: D/webview(28931): blockWebkitViewMessage= false
09-25 15:55:10.627: D/WebView(28931): loadUrlImpl: called
09-25 15:55:10.627: D/WebCore(28931): uiOverrideUrlLoading: shouldOverrideUrlLoading() returnstrue
09-25 15:55:10.627: D/webcore(28931): CORE loadUrl: called
09-25 15:55:10.627: D/webkit(28931): Firewall not null
09-25 15:55:10.632: D/webkit(28931): euler: isUrlBlocked = false