我们正面临着facebook的一个问题。 我们在我们的网络应用程序中集成了FB,当用户通过我们的网络应用程序中的fconnect登录时,他在我们的系统中注册(仅限第一次)只提供他的电子邮件ID。对于普通用户来说,很少有用户i / p在我们的系统中注册
我们的网络应用程序是用java [GWT2.0]开发的。
问题是FACEBOOK或normaluser在我们的网络应用程序中通过FB登录。(每次1个)
当用户刷新页面时,FB弹出窗口显示消息
“调试:加载FB.apiClient时出现异常TypeError:$ wnd.FB.Facebook未定义”
或有时 $ wnd.FB.Facebook.apiClient为空发生
我们上面错误[弹出]消息3次。
我们在html页面中使用了以下脚本 < script type =“text / javascript”language =“javascript” SRC = “http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php” >
在我们的网页应用程序的仅1页中,即UserHome页面,我们显示用户信息。 在该页面上仅出现错误消息
我们使用以下GWT代码[来自Gwittit]在控制器类[Singleton类]
中/ ** *当第一页上的所有数据都被加载时,函数被调用。 * * * / public void notifyFinishedLoadinPage(){ FacebookConnect.waitUntilStatusReady(新 RenderAppWhenReadyCallback());
}
私人MyLoginCallback loginCallback = new MyLoginCallback();
class MyLoginCallback implements LoginCallback { public void onLogin() { isFacebookSign = true; fbLoggedInUserId = ApiFactory.getInstance().getLoggedInUser(); for (FacebookObserver Observer : facebookObservers) { Observer.notifyFacebookLogin(true); } } } public void publishStream(final FacebookObserver fbObserver) { FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
“xd_receiver.htm”,loginCallback);
FacebookConnect.requireSession(new
AsyncCallback(){
public void onFailure(Throwable caught) { Window.alert("Require session failed: " + caught); GWT.log("Require session failed: " + caught, null); } public void onSuccess(Boolean isLoggedIn) { if (isLoggedIn) { for (FacebookObserver Observer :
facebookObservers){ Observer.notifyPublishStream(); } } } });
} public void facebookConnection() { FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
“xd_receiver.htm”,loginCallback); //服务器 FacebookConnect.requireSession(新 AsyncCallback(){
public void onFailure(Throwable caught) { GWT.log("Require session failed: " + caught, null); } public void onSuccess(Boolean isLoggedIn) { if (loginCallback != null && isLoggedIn) { loginCallback.onLogin(); } else { //User not logged in } } }); } /** * Fired when we know users status */ private class RenderAppWhenReadyCallback implements
AsyncCallback {
public RenderAppWhenReadyCallback() { FacebookConnect.init(FacebookConstants.FACEBOOK_API_KEY,
“xd_receiver.htm”,loginCallback); //服务器 }
public void onFailure(Throwable caught) { Window.alert("Unable to login through Facebook: " + caught); } public void onSuccess(ConnectState result) { if (result == ConnectState.connected) { isFacebookSign = true; for (FacebookObserver Observer : facebookObservers) { Observer.notifyFacebookLogin(true); } //History.newItem(HistoryConstants.USERHOME_PAGE_HISTORY_TOKEN); } else { //rightSideFlexTable.clearCell(0, 0); //rightSideFlexTable.setWidget(0, 0,
facebookPanel); isFacebookSign = false;
} } };
现在我们无法找到解决此问题的方法。
任何人都可以帮助我们尽快解决这个问题
希望 - 最佳合作
答案 0 :(得分:0)
我们找到了上述问题的解决方案。
Facebook(登录)加载需要很少的时间。
在我们的网页中,我们获取fb详细信息,如fb用户loggedInId,Image等。 所以在页面加载时我们得到所有值为null因为facebook没有正确加载 所以我们得到 $ wnd.FB.Facebook.apiClient为空或
调试:加载FB.apiClient时出现异常TypeError:$ wnd.FB.Facebook未定义“
为了解决这个问题,我们编写了一个方法,当用户刷新页面或正确完成facebook加载后调用。
public void notifyFacebookLogin(boolean isLogin){
Long fbLoggedInUserId = ApiFactory.getInstance()。getLoggedInUser();
if(fbLoggedInUserId!= null){
if (globalEndUserInfo == null) { globalEndUserInfo = new EndUserInfo(); globalEndUserInfo.setFbLoggedInUserId(fbLoggedInUserId); }
}
//我们处理FB相关对象的任何地方的代码
}
现在,当用户刷新页面或fb需要时间加载
时,不会显示错误消息通过这种方式我们解决了我们的问题。 :)