2

我正在使用 Titanium SDK 3.1.0,我无法在 iOS 和 Android 中登录 Facebook。我在两者中都收到不同的错误消息。在 Android 中,尝试使用 Titanium 中的 Facebook 模块登录 Facebook 时,我在 logcat 中收到以下错误:

E/FacebookModule(29188): (main) [114509,241940] LoginDialogListener onFacebookError: null
E/FacebookModule(29188): com.facebook.android.FacebookError
E/FacebookModule(29188):    at com.facebook.android.Facebook.onSessionCallback(Facebook.java:433)
E/FacebookModule(29188):    at com.facebook.android.Facebook.access$000(Facebook.java:97)
E/FacebookModule(29188):    at com.facebook.android.Facebook$2.call(Facebook.java:379)
E/FacebookModule(29188):    at com.facebook.Session$3$1.run(Session.java:1239)
E/FacebookModule(29188):    at android.os.Handler.handleCallback(Handler.java:605)
E/FacebookModule(29188):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/FacebookModule(29188):    at android.os.Looper.loop(Looper.java:137)
E/FacebookModule(29188):    at android.app.ActivityThread.main(ActivityThread.java:4424)
E/FacebookModule(29188):    at java.lang.reflect.Method.invokeNative(Native Method)
E/FacebookModule(29188):    at java.lang.reflect.Method.invoke(Method.java:511)
E/FacebookModule(29188):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/FacebookModule(29188):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/FacebookModule(29188):    at dalvik.system.NativeStart.main(Native Method)
E/FacebookModule(29188): (main) [7,241947] onAuthFail: null

这是我用来尝试登录 facebook 的代码:

var fb = require('facebook');
fb.appid = FACEBOOK_APP_ID;
fb.permissions = ['publish_stream'];
fb.forceDialogAuth = true;
fb.addEventListener('login', function(e) {
    if (e.success) {
        socialFacebook.image = imagesPath + "kinedu_0000_btn_FB.png";
    } else if (e.error) {
        alert('Error: ' + e.error);
    } else if (e.cancelled) {
        alert("Canceled");
    }
}); 

var socialFacebook = Ti.UI.createImageView({
    image:imagesPath + "kinedu_0000_btn_FB.png", 
    left:"5%", 
    bottom:10, 
    right:Ti.Platform.displayCaps.platformWidth/2   
});

function socialFacebookTouchStart()
{       
    var animateTouchStart = Ti.UI.createAnimation({
        bottom:9, duration:200
    });
    socialFacebook.animate(animateTouchStart);  
}
function socialFacebookTouchEnd()
{           
    var animateTouchEnd = Ti.UI.createAnimation({
        bottom:10, duration:200
    });
    socialFacebook.animate(animateTouchEnd);            
    animateTouchEnd.addEventListener("complete", function(e){
        if(fb.loggedIn)
        {
            //open facebook posting window  
            alert('logged in to facebook');
            var openPostingOnFacebookMainView = Ti.UI.createAnimation({
                opacity:1, 
                duration:250
            });
            var openPostingOnFacebookViewAnimation = Ti.UI.createAnimation({
                opacity:1, 
                top:0, 
                duration:250
            });
            postingOnFacebookView.animate(openPostingOnFacebookViewAnimation);

            openPostingOnFacebookViewAnimation.addEventListener("complete", function(e){
                postingOnFacebookMainView.animate(openPostingOnFacebookMainView);
            });
        }
        else
        {
            alert('not logged in')
            fb.authorize();
        }
    });
}

socialFacebook.addEventListener("touchstart", socialFacebookTouchStart);

socialFacebook.addEventListener("touchend", socialFacebookTouchEnd);

我有一个视图,当它被触摸时应该触发一个事件登录到 facebook,如果登录成功,那么它应该显示另一个视图。但是对 Facebook 的调用失败,我收到了该错误消息。在 iOS 中,代码几乎相同,只是模块的启动方式不同,以使用 iOS 6 内置的 Facebook 登录:

var fb = require('facebook');
fb.appid = 548069311920318;
fb.permissions = ['read_stream'];
fb.forceDialogAuth = false;

但是有了这个,我收到以下错误:用户取消了登录过程。如果我唯一要做的就是单击视图登录,我怎么能取消该过程?这是我第一次使用 Facebook 模块,我正在按照文档中提供的示例进行操作,但我不知道为什么在 Android 和 iOS 上都会出现这些错误。我将不胜感激您能提供的任何帮助。

4

2 回答 2

1

检查您的 Facebook 应用程序是否在sandbox mode.

转到您的 Facebook 开发人员控制台,查看是否选中了 sanbox 模式复选框。如果选中,则取消选中它并使应用程序生效(对所有用户可见)。

于 2013-08-16T08:28:47.707 回答
0

最后,我不得不创建另一个 Facebook 应用程序密钥,我不明白当前一个有什么问题,因为同一个项目可以部署在不同的计算机上并且登​​录没有问题。由于我们谈论的是在网页中创建的密钥,因此密钥似乎不是创建它的机器独有的。

这似乎不是一个真正的答案,但它是我发现解决我的问题的方法。

于 2013-08-16T16:37:59.830 回答