java - Facebook 在重新安装后登录时给出无效 token Facebook 异常

标签 java android eclipse facebook

我正在尝试使用最新的 FB SDK 登录 FB。

这是我的代码

Session currentSession = Session.getActiveSession();
if (currentSession == null || currentSession.getState().isClosed()) {
    Session session = new Session.Builder(v.getContext())
            .setApplicationId(getResources().getString(R.string.app_Id))
            .build();
    Session.setActiveSession(session);
    currentSession = session;
}
if (!currentSession.isOpened()) {
    Session.OpenRequest openRequest = null;
    openRequest = new Session.OpenRequest(FBLogin.this);
    if (openRequest != null) {
        openRequest.setDefaultAudience(SessionDefaultAudience.EVERYONE);
        openRequest.setPermissions(PERMISSIONS);
        openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
        currentSession.addCallback(callback);
        currentSession.openForRead(openRequest);
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Constants.RESULT_OK) {
        finish();
    } else Session.getActiveSession().onActivityResult(this, requestCode,
        resultCode, data);
}

private Session.StatusCallback callback = new Session.StatusCallback() {

    public void call(Session session, SessionState state,
            Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};

private void onSessionStateChange(Session session, SessionState state,
        Exception exception) {
    if (state.isOpened()) {
        registerWithServer(session);
    } else if (state.isClosed()) {
        mDialog.dismiss();
        Utilities
                .displayAlert(
                    "Oops!",
                    "Could not connect to Facebook. Try removing application"
                    + "from App dashboard", FBLogin.this);
    }
}

代码在您第一次尝试运行时运行良好。但如果应用程序被卸载或重新安装,然后您尝试登录,它会打开 FB 页面,请求权限,然后给出 FacebookException, token 无效。

我修复它的唯一方法是“尝试从应用程序仪表板中删除应用程序”

这是怎么回事? FB 代币如何运作?在重新授权时,它应该创建一个新 token 而不是失败吗?

最佳答案

          Try this code for facebook login

       Session.openActiveSession(this, true, new Session.StatusCallback() {

      // callback when session changes state
      @Override
      public void call(final Session session, SessionState state, Exception exception) {

        if (session.isOpened()) {
            if(!session.getPermissions().contains("email"))
                    {
                session.requestNewReadPermissions(new Session.NewPermissionsRequest(Facebookpersil.this, PERMISSIONS));
                    }

          // make request to the /me API
          Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

            // callback after Graph API response with user object
            @Override
            public void onCompleted(GraphUser user, Response response) {
              if (user != null) {

                  try
                  {

                Log.w("",""+user.asMap());
               name= user.getName();
            //   location=user.getLocation().getCity();
               nickname=user.asMap().get("username").toString();
               email=user.asMap().get("email").toString();
                String id=user.getId();
                URL img_value = null;
                try {
                    img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=small");
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                fbprofileimage=img_value.toString();
                session.close();
                if(email.length()==0)
                {
                    Toast("Unexpected error. Please try again");
                    finish();
                }
                else{
                    new Loginauth().execute();
                }
                  }
                  catch(Exception e)
                  {
                      Log.w("error", e.toString());
                  }
                }
            }
          });
        }
      }
    });




  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  }

关于java - Facebook 在重新安装后登录时给出无效 token Facebook 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17648657/

相关文章:

java - Tomcat 服务器无法启动

android - 如何在没有市场非系统应用程序的情况下在 android 上自动安装 apk

安卓10 : GATT error with 133 - how fix?

android - 尝试在 mac os x 上使用 phonegap-2.8.1 创建 Android 项目时发生意外错误

java - 将工作集配置到 Maven pom.xml 中

java - Spring DBCP 连接被终止

java - Mat 的 ConvertTo() 方法无法正常工作?

java - EJB定时器服务: Changing location of file data store

android - 当我声明我的按钮时,应用程序停止并且无法打开

eclipse - 无法使用 https 和 SSH 链接在 Eclipse 中克隆 git 存储库