我正在使用Facebook android sdk 3.0。我想要的是用户的id和访问令牌,我正在完美。问题是如果fb app没有安装在设备上并且我试图登录,它确实登录但登录对话框再次弹出,甚至在点击该对话框对话框的关闭按钮后继续弹出,直到并且除非我再次登录。 / p>
这是我的代码:
if(v.getId()==imgLike.getId())
{
try
{
/*
* Logging in with Facebook
*/
try
{
login_facebook();
}catch(NullPointerException npx)
{
npx.printStackTrace();
}
catch(Exception ex)
{
}
}catch(Exception ex)
{
ex.printStackTrace();
}
}
public void login_facebook()
{
try
{
Session.openActiveSession(acontext, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if(session.isOpened())
{
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(acontext, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if(user!=null)
{
fbUserid=user.getId();
fbAccessToken=session.getAccessToken();
Log.i("User Name ", "Name : "+user.getName());
Log.i("User Id ", "Id : "+user.getId());
Log.i("User Access Token ", "Access Token : "+session.getAccessToken());
new LikeUrl().execute(carName.get(currentIMage));
}
}
});
}
}
});
}catch(NullPointerException npx)
{
npx.printStackTrace();
}catch(BadTokenException bdx)
{
bdx.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try
{
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}catch(IllegalStateException ilgx)
{
ilgx.printStackTrace();
}
catch (NullPointerException e) {
// TODO: handle exception
e.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
答案 0 :(得分:0)
在没有安装Facebook应用程序的情况下使用模拟器时遇到了同样的问题。 事实上,我认为第一个对话框登录是需要基本权限的对话(即公共配置文件和朋友列表),而第二个对话框用于附加权限(在您的情况下为读取权限)。
当我安装官方Facebook应用程序时,两个对话框完全根据此假设进行了更改。
如果您想在此处查看单个对话或单个权限请求,可以找到有用的讨论:link