Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook android sdk登录对话框_Android_Facebook Android Sdk - Fatal编程技术网

Facebook android sdk登录对话框

Facebook android sdk登录对话框,android,facebook-android-sdk,Android,Facebook Android Sdk,我正在使用Facebook android sdk 3.0。我想要的是用户的id和访问令牌,我得到了完美的。问题是,如果设备上没有安装fb应用程序,并且我尝试登录,它确实会登录,但登录对话框会再次弹出,即使在单击该对话框的关闭按钮之后,该对话框也会一直弹出,直到我再次登录为止 这是我的密码: if(v.getId()==imgLike.getId()) { try { /*

我正在使用Facebook android sdk 3.0。我想要的是用户的id和访问令牌,我得到了完美的。问题是,如果设备上没有安装fb应用程序,并且我尝试登录,它确实会登录,但登录对话框会再次弹出,即使在单击该对话框的关闭按钮之后,该对话框也会一直弹出,直到我再次登录为止

这是我的密码:

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;
    }
if(v.getId()==imgLike.getId())
{
尝试
{
/*
*使用Facebook登录
*/
尝试
{
登录facebook();
}捕获(NullPointerException npx)
{
npx.printStackTrace();
}
捕获(例外情况除外)
{
}
}捕获(例外情况除外)
{
例如printStackTrace();
}
} 
公共无效登录\u facebook()
{
尝试
{
openActiveSession(acontext,true,new Session.StatusCallback()){
@凌驾
公共无效调用(最终会话、会话状态、异常){
//TODO自动生成的方法存根
if(session.isOpened())
{
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新建会话.newpermissions请求(acontext,PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
Request.executeRequestAsync(会话,新请求.GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,响应){
//TODO自动生成的方法存根
如果(用户!=null)
{
fbUserid=user.getId();
fbAccessToken=session.getAccessToken();
Log.i(“用户名”,“名称:”+User.getName());
Log.i(“用户Id”,“Id:+User.getId());
Log.i(“用户访问令牌”,“访问令牌:+session.getAccessToken());
new LikeUrl().execute(carName.get(currentIMage));
}
}
});
}
}
});
}捕获(NullPointerException npx)
{
npx.printStackTrace();
}捕获(BadTokenException bdx)
{
bdx.printStackTrace();
}
捕获(例外情况除外)
{
例如printStackTrace();
}
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
尝试
{
Session.getActiveSession().onActivityResult(此、请求代码、结果代码、数据);
}捕获(非法状态异常ilgx)
{
ilgx.printStackTrace();
}
捕获(NullPointerException e){
//TODO:处理异常
e、 printStackTrace();
}
捕获(例外情况除外)
{
例如printStackTrace();
}
}
私有布尔isSubsetOf(集合子集、集合超集){
for(字符串:子集){
如果(!superset.contains(string)){
返回false;
}
}
返回true;
}

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

当我安装官方Facebook应用程序时,两个对话框完全按照这个假设发生了变化


如果您希望在此处使用单个对话框或单个权限请求,您可以找到一个有用的讨论:

Hey@5agado我尝试使用UILifeCycleHelper实现FB登录流,在某些情况下,
数据
参数通常会有一个包含FB响应的字段
mMap
,该字段为空。为什么会发生这种情况?