登录后Facebook没有回来但又要求登录

San*_*til 7 android facebook login

我试图在我的应用程序中实现Facebook登录功能,并在获得发布权限后获取令牌.

为此,我按照以下步骤操作.

  1. 在Facebook上创建应用程序(填写所有详细信息,如应用程序名称,哈希键(发布),类名称,包名称,单点登录)

  2. 应用程序现在可供所有用户使用.

  3. 然后我在manifest.xml中使用app id

如果在我的手机上安装Native Facebook应用程序,一切都正常.但是如果本机应用程序没有安装,那么它会在填写登录信息后打开facebook webview,它要求我在点击确定按钮后授权再次要求我登录.这个过程将继续下去.

****登录并允许应用程序权限后,它不会回到我的屏幕,但它要求再次登录我****.

这是我的屏幕截图.

在此输入图像描述

这是第二个屏幕截图

在此输入图像描述

点击确定然后再次要求我登录.这是循环登录 - 授权 - 登录..
这是我的完整代码:

我使用自己的按钮,所以我不添加xml代码.

  public class FBActivity extends Activity {
Session.StatusCallback statusCallback = new SessionStatusCallback();

@Override
public void onCreate(Bundle savedInstanceState) {       
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.registartionwithmultiple);
    printHashKey();
    bundle = savedInstanceState;
    permissions = new ArrayList<String>();
    readpermissions = new ArrayList<String>();

    permissions.add("publish_actions");
    readpermissions.add("email");
    executeFacebookLogin();     
}       

private void executeFacebookLogin() {
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);         
    Session session = Session.getActiveSession();
    if(session == null) {
        if(bundle != null) {
            Log.i("TEST","RESTORING FROM BUNDLE");
            session = Session.restoreSession(this, null, statusCallback, bundle);
        }
        if(session == null) {
            Log.i("TEST","CREATE NEW SESSION");
            session = new Session(this);
        }
        Session.setActiveSession(session);          
        session.addCallback(statusCallback);
        if(session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {

            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(readpermissions));

        } 
    }

    if(session.isClosed()) {
        session.closeAndClearTokenInformation();
        Session.setActiveSession(null);
    }
    if(!session.isOpened()) {

        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(readpermissions));
        Log.i("FB Login ","Open for Publish");
    } else {
        Session.openActiveSession(this, true, statusCallback);
    }

}


private class SessionStatusCallback implements Session.StatusCallback {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        //Check if Session is Opened or not
        processSessionStatus(session, state, exception);
    }
}

@SuppressWarnings("deprecation")
public void processSessionStatus(Session session, SessionState state, Exception exception) {
    Log.i("TEST","Session in process session "+session);
    if(session != null && session.isOpened()) {

        if(session.getPermissions().contains("publish_actions")) {
            //Show Progress Dialog 
            dialog = new ProgressDialog(this);
            dialog.setMessage("Loggin in..");
            dialog.show();
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {


                    if (dialog!=null && dialog.isShowing()) {
                        dialog.dismiss();
                    }
                    if(user != null) {
                        Map<String, Object> responseMap = new HashMap<String, Object>();
                        GraphObject graphObject = response.getGraphObject();
                        responseMap = graphObject.asMap();
                        Log.i("FbLogin", "Response Map KeySet - " + responseMap.keySet());
                        // TODO : Get Email responseMap.get("email"); 

                        fb_id = user.getId();
                        fb_email = null;
                        user.getBirthday();
                        fb_userName = user.getUsername();
                        fb_fullname = user.getFirstName() +" "+user.getLastName();

                        String name = (String) responseMap.get("name");
                        if (responseMap.get("email")!=null) {
                            fb_email = responseMap.get("email").toString();
                            Log.i("TEST", "FB_ID="+fb_id +"email="+fb_email+"name="+name+"user_name="+user.getUsername()+"birthday="+user.getBirthday());
                            Session session = Session.getActiveSession();
                            tokenKey = session.getAccessToken();
                            SharedPreferenceStoring myPrefsClass = new SharedPreferenceStoring();
                            myPrefsClass.storingFBToken(FBActivity.this, tokenKey);

                            finish();

                        }
                        else {
                            //Clear all session info & ask user to login again
                            Session session = Session.getActiveSession();                               
                            if(session != null) {
                                session.closeAndClearTokenInformation();
                            }
                        }
                    }
                }
            });
        } else {

            session.requestNewPublishPermissions(new Session.NewPermissionsRequest(FBActivity.this, permissions));

        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("TEST","Activity result");
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("FbLogin", "Result Code is - " + resultCode +"");
    Session.getActiveSession().onActivityResult(FBActivity.this, requestCode, resultCode, data);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Save current session
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
}
Run Code Online (Sandbox Code Playgroud)

}

我也得到哈希键..这是哈希键的代码

private void printHashKey() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.myapp",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}  
Run Code Online (Sandbox Code Playgroud)

我还添加Internet PermissionAndroidManifest.xmlmeta-data为Facebook.

希望所有这些信息都足够,如果需要更多的东西肯定会更新我的问题.

请给我任何参考或提示.

The*_*uto 0

所以我想告诉你的是,你必须找到关键哈希值并将其放入 Facebook 控制台,使用下面的代码获取关键哈希值:

try {
               PackageInfo info = getPackageManager().getPackageInfo("com.key", PackageManager.GET_SIGNATURES);
               for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());

                      TextView tvmyName = (TextView)findViewById(R.id.KeyText);
                      tvmyName.setText(Base64.encodeBytes(md.digest()));
                      Log.d("KEY_HASH", Base64.encodeBytes(md.digest()));


               }
            } catch (NameNotFoundException e) {

            } catch (NoSuchAlgorithmException e) {

            }
Run Code Online (Sandbox Code Playgroud)

KeyHash 值 1:tvmyName.setText(Base64.encodeBytes(md.digest()));

KeyHash 值 2:Log.d("KEY_HASH", Base64.encodeBytes(md.digest()));

请参阅下图以了解在 Facebook 控制台中传递 keyhash 值: 在此输入图像描述