我正在构建一个通过手机间隙运行的应用网站。电话间隙只是检查用户是否有互联网连接,并将外部网络应用程序加载到框架中。我可以在没有blib的情况下浏览网站,但是当我尝试登录Facebook(PHP重定向或javascript SDK)时,应用程序突然恢复其导航栏或打开一个新窗口(javascript SDK)。
无论如何我可以阻止这个吗?
问候
答案 0 :(得分:3)
虽然使用了ChildBrowser插件但我已经设法登录! (这是为Android)我已经使用了一些facebook连接插件的代码,这对我来说没有用,重新写了一些东西,所以我能理解它,现在有效。 Chears Juicy Scripter!
var fb_success = 'https://www.facebook.com/connect/login_success.html';
var fb_logout = 'https://www.facebook.com/connect/login_failed.html';
var fb_logout_ = 'http://m.facebook.com/logout.php?confirm=1&next=' + fb_logout;
var authorize_url = '';
var my_client_id = '##################';
var my_secret = '######################';
var my_type = 'user_agent';
var my_display = 'touch';
var token = false;
var fb_code = false;
var device_ready = false;
var ajax_url = '';
function logged_in(){
// alert('do what you need to do!');
}
function fb_force_logout(){
}
function fb_auth_check(){
console.log('fb_auth_check()');
if( fb_code !== false ) {
console.log('ajax test instigated...');
ajax_url = 'https://graph.facebook.com/oauth/access_token?client_id=' + encodeURIComponent(my_client_id) + '&client_secret=' + encodeURIComponent(my_secret) + '&code=' + encodeURIComponent(fb_code) + '&redirect_uri=' + fb_success;
$.ajax({
url: ajax_url,
type: 'POST',
success: function(html){
token = html.split("=")[1];
console.log('success! token = ' + token);
window.plugins.childBrowser.close();
fb_init();
},
error: function(error) {
console.log('there was an error...' + ajax_url);
window.plugins.childBrowser.close();
}
});
}
}
function fb_track_redirects(loc){
console.log('redirect tracked... ' + loc);
if ( loc.indexOf(fb_success) >= 0 || loc.indexOf(fb_success) > -1 ) {
fb_code = loc.match(/code=(.*)$/)[1]
console.log('success redirect... fb_code=' + fb_code);
fb_auth_check();
window.plugins.childBrowser.close();
} else if ( loc.indexOf(fb_logout) >= 0 || loc.indexOf(fb_logout) > -1 ) {
window.plugins.childBrowser.close();
}
}
function inner_init(){
console.log('inner_init()');
if( token === false ) {
console.log('token was false...');
authorize_url += "https://graph.facebook.com/oauth/authorize?";
authorize_url += "client_id=" + encodeURIComponent(my_client_id);
authorize_url += "&redirect_uri=" + encodeURIComponent(fb_success);
authorize_url += "&display=" + encodeURIComponent(my_display);
authorize_url += "&scope=publish_stream,offline_access";
console.log('instigated location change...');
window.plugins.childBrowser.onLocationChange = function(loc){
fb_track_redirects(loc);
}
console.log('open Facebbok login window');
window.plugins.childBrowser.showWebPage(authorize_url);
}else{
logged_in();
}
}
function fb_init(){
console.log('fb_init()');
if( device_ready === false ) {
console.log('first device run...');
document.addEventListener("deviceready", function(){
device_ready = true;
console.log('device ready...');
inner_init();
}, false);
}else{
inner_init();
}
}
$(document).ready(function(){
$('#login').bind('click', function(){
fb_init();
return false;
})
});
</script>
答案 1 :(得分:1)
这适用于所有原生或网络应用,无需修补SDK代码。
这可能已经完成,但需要深入研究代码。问题是你真的需要吗?这是一种理想的行为。
您可以尝试使用PhoneGap Facebook插件并启用单点登录,因此如果存在,将打开本地Facebook应用程序而不是浏览器来验证用户。
顺便说一句,
仅包含外部网站的应用在应用商店中被拒绝。
<强>更新强>
哪些点可能对answer (by Facebook employee)类似问题How can I use an access token to circumvent FB.login()也有帮助。
另请查看ChildBrowser PhoneGap插件(以及Example)。