Facebook android sdk登录对话框

时间:2013-03-06 10:32:52

标签: android facebook-android-sdk

我正在使用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;
    }

1 个答案:

答案 0 :(得分:0)

在没有安装Facebook应用程序的情况下使用模拟器时遇到了同样的问题。 事实上,我认为第一个对话框登录是需要基本权限的对话(即公共配置文件和朋友列表),而第二个对话框用于附加权限(在您的情况下为读取权限)。

当我安装官方Facebook应用程序时,两个对话框完全根据此假设进行了更改。

如果您想在此处查看单个对话或单个权限请求,可以找到有用的讨论:link