0
votes

I am trying to to receive email of user logged in via Facebook. I made it working on Android but on iOS it returns me userdata without email.

My code is:

var viewClick = function() {
    fb.logout();
    fb.initialize(); 
    fb.authorize();
};

var facebookLogged = function(e) {
    Ti.API.info('results From Event: ' + JSON.stringify(e))
    fb.requestWithGraphPath("me?fields=name,email,first_name,last_name", {}, 'GET', function(result) {
    //  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);
    });
};


var window = Ti.UI.createWindow({exitOnClose: true, navBarHidden: true, fullscreen: true, orientationModes: [
        Ti.UI.PORTRAIT,
        Ti.UI.UPSIDE_PORTRAIT,      
    ],
    backgroundColor: '#f0f2f2'
}); 

var fb = require('facebook');

if(Ti.Platform.osname === 'android') {

    window.fbProxy = fb.createActivityWorker({lifecycleContainer: window});
}

    //fb.setLoginBehavior(fb.LOGIN_BEHAVIOR_NATIVE);
fb.permissions = ['email'];

window.open();


var view = Ti.UI.createView({
    height: 200,
    width: 200,
    backgroundColor: 'red'
}); 

view.addEventListener('click', viewClick);

window.add(view);
fb.addEventListener('login', facebookLogged);

Results are:

results From Event: {"success":true,"code":0,"data":"{\"firstName\":\"Eren\",\"lastName\":\"Kars\",\"userID\":\"1498651573764560\",\"middleName\":\"\",\"name\":\"Eren Kars\",\"linkURL\":\"https:\\/\\/www.facebook.com\\/app_scoped_user_id\\/1498651573764560\\/\"}","uid":"1498651573764560","cancelled":false,"bubbles":true,"type":"login","source":{"id":"facebook"},"cancelBubble":false}

results From Graph API: {"result":"{\"id\":\"1498651573764560\",\"last_name\":\"Kars\",\"name\":\"Eren Kars\",\"first_name\":\"Eren\"}","success":true,"path":"me?fields=name,email,first_name,last_name"}

-- email: undefined

There is no problem with configuration/module because:

  1. I made it working on Android (it returns email),
  2. It works fine with logging in (both on Android/iOS),
  3. It returns all the fields except email and gives no errors with Graph API.

Thanks in advance for any help.

1
I'm also using 'email' permission, but I think users have to allow facebook and apps to see their email addresses. Sometimes it works and sometimes not. If I try it with my facebook account it works, but I have some users without this informationCarlos Zinato
@CarlosHenriqueLustosa: I don't think it is an issue because on Android same account returns email.kreatywny
after facebook v 2.0 api has email id become optional, if user make it private then email should not be retrieve in api, but you get fb id .Jain

1 Answers

0
votes

The reason was that I put some LSApplicationQueriesSchemes strings but it seems i did not add all required ones. I added all of them (more than Appcelerator documentation required) and now it works fine.

<key>LSApplicationQueriesSchemes</key>
            <array>
                <string>fbapi</string>
                <string>fbapi20130214</string>
                <string>fbapi20130410</string>
                <string>fbapi20130702</string>
                <string>fbapi20131010</string>
                <string>fbapi20131219</string>
                <string>fbapi20140410</string>
                <string>fbapi20140116</string>
                <string>fbapi20150313</string>
                <string>fbapi20150629</string>
                <string>fbapi20160328</string>
                <string>fbauth</string>
                <string>fbauth2</string>
                <string>fb-messenger-api20140430</string>
            </array>