【问题标题】:titanium - get the facebook user name?钛 - 获取 facebook 用户名?
【发布时间】:2012-10-24 01:24:04
【问题描述】:

使用钛,一旦登录 facebook,是否有人有一些简单的说明来获取用户的 facebook 名称?

【问题讨论】:

    标签: facebook titanium


    【解决方案1】:

    您无需执行任何此操作,用户名在登录完成后的数据响应中提供。

    Look at the appcelerator documentation

    【讨论】:

    • 你是对的......但我使用了授权,所以我需要定义一个处理程序等来处理这个。不过,+1 为我指明了正确的方向。
    【解决方案2】:

    我没有测试过代码,但你可以试试这个:

    var fbuid = Titanium.Facebook.uid; //this would be the logged user's facebook uid
    
    function fQuery() //this function exec the fql query
    {
        var myQuery = "SELECT name FROM user WHERE uid = "+fbuid;
    
        var data = [];
    
        Titanium.Facebook.request('fql.query', {query: myQuery},  function(x)
        {   
            var results = JSON.parse(x.result);
            var username = results[0].name; //user's fb name
        });
    };
    

    【讨论】:

    • 嗯,不——这是使用我们被鼓励不要这样做的“请求”调用
    • 另外,请求是异步的……所以你的用户名不会得到结果。这个答案在所有可能的层面上都是错误的。
    【解决方案3】:

    啊,这就是你的做法:

    function getFacebookInfo(){
        Titanium.Facebook.requestWithGraphPath('me', {}, 'GET', function(e){
            if (e.success){
                var jsonObject  = JSON.parse(e.result);
                //do something here with these values. They cannot be passed out of this
                //function call... this is an asynchronous call
                //that is, do this:
                saveToDb(jsonObject.first_name);
            } else {
                //some sort of error message here i guess
            }
        });
    
    };
    

    最后,与nameusername 一起,查看 facebook 页面以了解您可以获得的其他变量 -

    http://developers.facebook.com/docs/reference/api/

    最后:请注意这是一个回调,并且钛实际上不会等待此调用完成。也就是说,任何声明保存在 requestWithGraphPAth 之后返回的结果的变量都将立即返回,因此几乎总是为空。

    我猜你可以制作一个漂亮的循环,它只是...循环直到某个变量设置为 false。你会在回调中将变量设置为 false ......但这看起来很狡猾。

    只需让你的回调做所有的事情,也就是说,保存到数据库等

    如果你确实走调用 Ti.Facebook.authorise() 来登录用户的路线,记得定义

    Ti.Facebook.addEventListener('login',function(e){
        if (e.success){ 
    ...
    ...
        } else if (e.error){  } else if (e.cancel) { }
    }
    

    在通话之前。然后,在成功位中,您可以进行 requestWithGraphPath 调用等等。我只是将所有详细信息保存到数据库中,然后每次都检索它们,对我来说很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-12
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多