Titanium JIRA Archive
Appcelerator Community (AC)

[AC-2190] Android: Facebook login occasionally hangs

GitHub Issuen/a
TypeBug
Priorityn/a
StatusClosed
ResolutionCannot Reproduce
Resolution Date2013-09-09T20:50:22.000+0000
Affected Version/sn/a
Fix Version/sn/a
ComponentsAppcelerator Modules, Titanium SDK & CLI
Labelsfacebook, module
ReporterMark Mokryn
AssigneeMauro Parra-Miranda
Created2013-06-18T11:41:02.000+0000
Updated2016-03-08T07:41:10.000+0000

Description

*Steps to reproduce* 1. Build for Android device 2. Click login button, wait for login event 3. Click logout button 4. Click back button to close app 5. Repeat above steps a few times. After a few iterations (usually just 2 or 3), clicking the login button seems to have no effect. 6. At this point, check the Android logs. I see the following message: com.facebook.Session Should not pass a read permission (email) to a request for publish or manage authorization . Something is clearly wrong, as my app never asked for anything besides email permission. 7. At this point, only closing the app enables recovery. This causes a major usability problem on Android. *index.js*
var loggedIn = undefined;
var fb = require('facebook');
fb.appid = 'YOUR_APP_ID';
fb.permissions = ['email'];
fb.forceDialogAuth = false;

function doLogin(e) {
	fb.authorize();
}

function doLogout(e){
	fb.logout();
}  

function loggedInState() {
	$.initLabel.visible = false;
	$.logoutBtn.visible = true;
	$.loginBtn.visible = false;	
	Ti.API.info('Access token in case we need to debug: ' + fb.accessToken);	
}

function loggedOutState() {
	$.initLabel.visible = false;
	$.logoutBtn.visible = false;
	$.loginBtn.visible = true;	
}

fb.addEventListener('logout', function() {
	loggedOutState();
});

fb.addEventListener('login', function(e) {
	Ti.API.info('Facebook login event, data:' + JSON.stringify(e.data) + ' cancelled: ' + e.cancelled + 
		' error: ' + e.error + ' type: ' + e.type + ' uid: ' + e.uid + ' success: ' + e.success);
	if (e.success) {
		loggedInState();
		alert('Login success, see console logs for user data');
	} else if (e.error) {
		alert ('Login error: ' + e.error);
		loggedOutState();
	} else if (e.cancelled) { // do nothing
		alert('Login cancelled');
		loggedOutState();
	} else {
		alert('no success, no error, and not cancelled... assume loggedOutState');
		loggedOutState();
	}
});

loggedIn = fb.getLoggedIn();
Ti.API.info('logged in: ' + loggedIn); 
if (loggedIn) {
	loggedInState();
}

if (loggedIn === false) {
	loggedOutState();
}

$.index.open();
*index.xml*
 
<Alloy>
	<Window class="container">
		<Label id="initLabel">This appears only when login state is undefined</Label>
		<Button id="loginBtn" onClick="doLogin">Facebook Login</Button>
		<Button id="logoutBtn" onClick="doLogout">Facebook Logout</Button>
	</Window>
</Alloy>
*index.tss*
".container": {
	backgroundColor:"white"
},
"#initLabel": {
	width: Ti.UI.SIZE,
	height: Ti.UI.SIZE,
	color: "#000",
	visible: true
} ,
"#loginBtn": {
	visible: false
},
"#logoutBtn": {
visible: false
}
*tiapp.xml extract*
<id>com.test.ti</id> <!-- make sure this matches your Facebook app config -->
<property name="ti.facebook.appid">YOUR_APP_ID</property>
...
    <modules>
    	<!-- Add the appropriate line(s) to your modules section -->
    	<module platform="android">facebook</module>
    	<module platform="iphone">facebook</module>
    </modules>

Comments

  1. Mauro Parra-Miranda 2013-09-09

    Tested this, looks working just fine.
  2. Jan Helleman 2014-01-07

    I have the same issue on 3.2.0 with fb module 3.0.2. When clicking the button the log says "W/com.facebook.Session: Should not pass a read permission (email) to a request for publish or manage authorization" and no auth popup appears. The code: Alloy.Globals.Facebook = require('facebook'); Alloy.Globals.Facebook.appid = 'xxx'; Alloy.Globals.Facebook.permissions = ['email']; Alloy.Globals.Facebook.forceDialogAuth = false;

JSON Source