发送到 Messenger 按钮未显示在 Android Webview 中
Send to Messenger Button not showing up in Android Webview
上下文: 我正在尝试 link 我的 android 应用程序中经过身份验证的用户使用 "Send to Messenger" 访问 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 方法 Activity:
@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 fanpage/App。
问题: 当我在 Android WebView 上加载网站时,按钮没有显示。
详细信息: 使用 Chrome 远程调试,我能够确定 Facebook SDK 正在运行并且几乎所有按钮元素都已加载,除了生成的 iframe 内容。
使用“赞”按钮测试了 Facebook jssdk,该按钮有效并显示。
网站控制台或 logcat 中没有错误。
为什么 WebView 没有显示那个特定的按钮?
测试网站:https://www.vsdesigns.cl/debug/login.php
编辑:
Here is an image 从桌面浏览器访问测试网站。 显示按钮。
Here is another image WebView 正在加载测试网站。它实际上是 chrome 远程调试器的表示,但它与我的智能手机屏幕显示的相同。 它不显示按钮。
提前致谢。
我发现 Facebook Cookies 根本没有加载,如果应用程序正在开发中并且用户之前没有登录,Facebook 不会呈现插件,所以我实现了以下代码来接受 Third派对饼干。 (仅适用于 SDK 版本 21 Lollipop 及更高版本)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(mWebview,true);
}
mWebview 将是存储实际 WebView 的变量。
上下文: 我正在尝试 link 我的 android 应用程序中经过身份验证的用户使用 "Send to Messenger" 访问 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 方法 Activity:
@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 fanpage/App。
问题: 当我在 Android WebView 上加载网站时,按钮没有显示。
详细信息: 使用 Chrome 远程调试,我能够确定 Facebook SDK 正在运行并且几乎所有按钮元素都已加载,除了生成的 iframe 内容。
使用“赞”按钮测试了 Facebook jssdk,该按钮有效并显示。
网站控制台或 logcat 中没有错误。
为什么 WebView 没有显示那个特定的按钮? 测试网站:https://www.vsdesigns.cl/debug/login.php
编辑:
Here is an image 从桌面浏览器访问测试网站。 显示按钮。
Here is another image WebView 正在加载测试网站。它实际上是 chrome 远程调试器的表示,但它与我的智能手机屏幕显示的相同。 它不显示按钮。
提前致谢。
我发现 Facebook Cookies 根本没有加载,如果应用程序正在开发中并且用户之前没有登录,Facebook 不会呈现插件,所以我实现了以下代码来接受 Third派对饼干。 (仅适用于 SDK 版本 21 Lollipop 及更高版本)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(mWebview,true);
}
mWebview 将是存储实际 WebView 的变量。