這是我在我的Android應用程序中想要的。如果未安裝應用程序,從webview調用facebook sdk不起作用?
我想要一個按鈕在webview中調用我的java方法。此方法應調用Facebook sdk的authorize()函數並執行SSO/Dialog身份驗證方式。當我在webview中調用JavaScript方法時,訪問令牌和過期令牌將返回到webview。
這是我已經創建的。
在我的onCreate()活動中,我正在初始化webview。
mFB = new Facebook(APP_ID);
wv = (WebView) findViewById(R.id.web_view);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new JSInterface(this), "JAVA");
wv.loadUrl("file:///android_asset/test.html");
中的test.html在我的資產文件夾是這樣的 -
<script type="text/javascript">
function authorizeFacebook() {
JAVA.authorizeFacebook();
}
function showData(token, expire) {
document.getElementById('result').innerHTML = token + " >>>> " + expire;
}
</script>
的JS和Java之間的接口工作正常。我確信。我JSInterface是 -
public class JSInterface {
public Context mContext;
JSInterface(Context c) {
mContext = c;
}
public void authorizeFacebook() {
Log.e("FB", "authorizeFacebook() interface called");
authorizeFacebookSSO();
}
}
public void authorizeFacebookSSO() {
mFB.authorize(FBCMTestActivity.this, new DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
Log.e("FBAUTH", "FB failed + " + e.getErrorCode());
Toast.makeText(getApplicationContext(), "FBFAIL:" + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onError(DialogError e) {
Log.e("FBAUTH", "FB failed + " + e.getMessage());
Toast.makeText(getApplicationContext(), "FBFAIL:" + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(Bundle values) {
Log.e("FBAUTH", "SUCCESS");
Log.e("FBAUTH:", mFB.getAccessToken() + " " + mFB.getAccessExpires());
wv.loadUrl("javascript:showData('" + mFB.getAccessToken() + "' , '" + mFB.getAccessExpires() + "');");
}
@Override
public void onCancel() {
}
});
}
當我有Facebook的應用程序,這個偉大的工程。
但是,當沒有Facebook應用程序,它應該理想地顯示一個帶有webview的對話框。但它失敗並停在 - 「加載...」屏幕。
它就停在那兒,不會甚至崩潰。沒有日誌。過了一段時間,我強迫關閉它或等待它。有沒有人遇到過這個問題?
UPDATE
我onActivityResultCode() -
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mFB.authorizeCallback(requestCode, resultCode, data);
}
您是否在您的活動中實施了'onActivityResult'方法?你能發佈活動代碼嗎? –
我已經添加了onActivityResultCode()。但是我的SSO工作正常。該對話框不是。那麼onActivityResultCode()很重要嗎? – Enigma
您是否使用過網絡嗅探器來查看發送的請求以及來自Facebook的響應? –