发送到Messenger按钮未显示在Android Webview中

时间:2018-03-14 21:01:19

标签: java android facebook android-webview

上下文:我正在尝试使用“发送到Messenger”插件将我的Android应用中经过身份验证的用户链接到Facebook粉丝页面PSID,以便能够在某些特定用户上发送消息响应其他系统中用户操作的事件。

我认为实现这一目标的最佳方式(因为所述插件仅适用于Facebook Javascript SDK)是在我的应用程序中打开WebView Activity,使用插件按钮加载网站。

该网站包含以下内容以加载SDK和按钮:

<script>
    window.fbAsyncInit = function() {
        FB.init({
          appId            : '<<Here I put my FB App ID>>',
          autoLogAppEvents : true,
          xfbml            : true,
          version          : 'v2.12'
        });
    };

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "https://connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

<div class="fb-send-to-messenger" 
messenger_app_id="<<Same FB App ID>>" 
page_id="<<FB fanpage ID>>" 
data-ref="<<user identification>>" 
color="blue" 
size="standard">
</div>

这是Webview活动的onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webview = new WebView(this);

    getWindow().requestFeature(Window.FEATURE_PROGRESS);

    setContentView(webview);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        WebView.setWebContentsDebuggingEnabled(true);
    }

    webview.getSettings().setJavaScriptEnabled(true);

    final Activity activity = this;

    webview.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int progress) {
            // Activities and WebViews measure progress with different scales.
            // The progress meter will automatically disappear when we reach 100%
            activity.setProgress(progress * 1000);
        }

        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            Log.d("WEBVIEW_CONSOLE", consoleMessage.message() + " -- From line "
                    + consoleMessage.lineNumber() + " of "
                    + consoleMessage.sourceId());
            return super.onConsoleMessage(consoleMessage);
        }

    });
    webview.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
        }
    });

    webview.loadUrl(getString(R.string.authenticated_webview_url_example), headers);

期望: Facebook发送到Messenger按钮应加载到WebView中,允许用户在我的Facebook粉丝专页/应用程序上注册PSID。

问题:当我在Android WebView上加载网站时,按钮不会显示。

详细信息:使用Chrome远程调试,我能够确定Facebook SDK正在运行,并且除了生成的iframe的内容外,几乎所有按钮元素都已加载。

使用Like按钮测试了Facebook jssdk,该按钮工作并显示。

网站控制台或logcat没有错误。

为什么WebView没有显示该特定按钮? 测试网站:https://www.vsdesigns.cl/debug/login.php

编辑:

从桌面浏览器

Here is an image测试网站。 显示按钮

Here is another image,测试网站由WebView加载。它实际上是chrome远程调试器的表示,但它与我的智能手机屏幕显示的相同。 没有显示按钮

提前致谢。

1 个答案:

答案 0 :(得分:0)

我发现Facebook Cookies根本没有加载,如果App正在开发且用户以前没有登录过,Facebook也无法渲染插件,所以我实现了以下代码接受第三方cookie。 (仅适用于SDK版本21 Lollipop及以上版本)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    cookieManager.setAcceptThirdPartyCookies(mWebview,true);
}

mWebview将是存储实际WebView的变量。