Appcelerator Android Facebook登录错误代码2500

时间:2017-11-11 22:25:45

标签: android facebook facebook-graph-api appcelerator

使用Android API 6.2.0的Little Appcelerator Facebook登录问题。 Facebook登录界面显示。我没有问题登录。它说我之前已经通过Facebook授权该应用程序。我点击“继续”。然后我得到这个错误代码2500.这是日志:

// I added the X's to the token & uid for this log

[DEBUG] :  TiFacebookModule: (main) [1,298128] authorize called, permissions length: 1
[DEBUG] :  TiFacebookModule: (main) [1,298129] authorizing permission: email
[DEBUG] :  ActivityWorkerProxy: (main) [27137,325266] ActivityWorkerProxy onActivityResult
[DEBUG] :  TiFacebookModule: (main) [251,325517] user is not null
[DEBUG] :  TiFacebookModule: (main) [0,325517] firing login event from module
[WARN] :   TiFacebookModule: (main) [0,325517] The getCanPresentOpenGraphActionDialog property is deprecated. This always returns true.
[DEBUG] :  TiFacebookModule: (main) [1,325518] get accessToken
[WARN] :   TiFacebookModule: (main) [0,325518] The getCanPresentShareDialog property is deprecated. This always returns true.
[INFO] :   Facebook: SUCCESS // {"type":"login","source":{"loggedIn":true,"canPresentOpenGraphActionDialog":true,"permissions":["email","public_profile"],"accessToken":"EAADVQzAhldwBAN3ZCLDyeVF6NiWoIxLV1x8KTeAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXifLwjJPSDE7BFckLwMxJPmTu3BecteHVyutEc2uxbTV4ccG6OciIIOsXpTpewNlZC5hJkV1l0NtsjrFZARKdZBABOcZASPHjs0XZA6o9JRqlwkAX2S40ZCG0AqzsZD","loginBehavior":null,"canPresentShareDialog":true,"expirationDate":"2018-01-10T21:22:24.457Z","uid":"1163XXXXXXX6528","apiName":"Ti.Module","bubbleParent":true,"invocationAPIs":[{"namespace":"Facebook","api":"createActivityWorker"},{"namespace":"Facebook","api":"createLikeButton"},{"namespace":"Facebook","api":"createLoginButton"}],"__propertiesDefined__":true,"_events":{"login":{}}},"data":"{\"id\":\"1163XXXXXXX6528\",\"name\":\"Byte Bbt\"}","uid":"1163XXXXXXX6528","cancelled":false,"bubbles":false,"success":true,"code":0,"cancelBubble":false}
[INFO] :   me?fields=name,email,first_name,last_name
[ERROR] :  TiFacebookModule: (main) [70,325588] requestWithGraphPath callback error: An active access token must be used to query information about the current user.
[INFO] :   results From Graph API: {"error":"An error code 2500 has occured. An active access token must be used to query information about the current user."}
[ERROR] :  TiExceptionHandler: (main) [2,325590] ----- Titanium Javascript Runtime Error -----
[ERROR] :  TiExceptionHandler: (main) [0,325590] - In undefined:1,1
[ERROR] :  TiExceptionHandler: (main) [0,325590] - Message: Uncaught SyntaxError: Unexpected token u in JSON at position 0
[ERROR] :  TiExceptionHandler: (main) [0,325590] - Source: undefined

这段相同的代码在iOS上完美运行:

var fb = require('facebook');
$.index.fbProxy = fb.createActivityWorker({lifecycleContainer: $.index});
fb.permissions = ['email']; 
fb.initialize();

fb.addEventListener('login', function(e) {
    if (e.success) {
        Ti.App.FBuid   = e.uid;
        Ti.App.FBtoken = e.source.accessToken;
        Ti.App.FBname  = JSON.parse(e.data).name;
        Ti.API.info('Facebook: SUCCESS // ' + JSON.stringify(e));

        // This test didn't work
        // "me?accessToken=" + Ti.App.FBtoken + "&uid=" + Ti.App.FBuid + "&u=" + Ti.App.FBuid + "&fields=name,email,first_name,last_name"

        Ti.API.info("me?fields=name,email,first_name,last_name");
        fb.requestWithGraphPath("me?fields=name,email,first_name,last_name", {}, 'GET', function(result) {
            Ti.API.info('results From Graph API: ' + JSON.stringify(result));
            var data = JSON.parse(result.result);
            Ti.API.info("-- email: " + data.email);
            Ti.App.FBemail = data.email;
            Ti.App.FBfname = data.first_name;
            Ti.App.FBlname = data.last_name;
        });
    } else if (e.cancelled) {
        Ti.API.info('Facebook: FAIL');
    } else {
        $.blackout.hide();
        Ti.API.info('Facebook: ERROR // ' + e.error);
        alert("Oops. Something went wrong.\nPlease try again.");
    }
});

fb.authorize();

知道我怎么能摆脱这个“主动访问令牌”2500错误?感谢。

1 个答案:

答案 0 :(得分:2)

我猜你使用旧格式的传递字段来请求GraphApi。

试试这个,我的代码格式如下:

var fb = require('facebook');

// set permissions first
fb.permissions = ['public_profile', 'email']; 

// then add event listener
fb.addEventListener('login', facebookLogin);

// finally initialize
fb.initialize();

// attach proxy after initialisation
$.index.fbProxy = fb.createActivityWorker({lifecycleContainer: $.index});


// Pass fields as dictionary to be comaptible with latest graph api.
function facebookLogin(e) {
    if (e.success) {
        Ti.App.FBuid   = e.uid;

        // I think you don't need accessToken to store, Facebook module will use it properly when you call graph api.
        Ti.App.FBtoken = e.source.accessToken;
        Ti.App.FBname  = JSON.parse(e.data).name;

        // pass fields as dictionary
        fb.requestWithGraphPath("me", {fields:'name,email,first_name,last_name,gender', 'GET', function(result) {
            Ti.API.info('results From Graph API: ' + JSON.stringify(result));
            var data = JSON.parse(result.result);
            Ti.API.info("-- email: " + data.email);

            // this is not recommended approach to modify internal api Ti.App
            Ti.App.FBemail = data.email;
            Ti.App.FBfname = data.first_name;
            Ti.App.FBlname = data.last_name;
        });
    } else if (e.cancelled) {
        Ti.API.info('Facebook: FAIL');
    } else {
        $.blackout.hide();
        Ti.API.info('Facebook: ERROR // ' + e.error);
        alert("Oops. Something went wrong.\nPlease try again.");
    }
}


fb.authorize();