【问题标题】:{Session state:OPENING, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1xxxxxxxxxxx}{会话状态:OPENING,令牌:{AccessToken 令牌:ACCESS_TOKEN_REMOVED 权限:[]},appId:1xxxxxxxxxxx}
【发布时间】:2014-03-18 01:50:40
【问题描述】:

我想在我的应用程序中实现 Facebook 登录,但在这里我在尝试登录时遇到了问题,即:

**{Session state:OPENING, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1xxxxxxxxxxxxxxx}**

有时还有这个:

  **{Session state:CLOSED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1xxxxxxxxxxxxxxx}**

注意:当我的设备已经安装了 NATIVE FACEBOOK APP 时会出现上述问题,如果我卸载 Facebook 应用程序,它绝对可以正常工作。谁能帮我看看这是怎么回事?

提前致谢

【问题讨论】:

  • 请贴一些代码。
  • 你想好如何解决这个问题了吗?

标签: android facebook session facebook-graph-api


【解决方案1】:

请务必在您的 Activity 中覆盖 onActivityResult 方法:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);

}

【讨论】:

  • 这是我的问题,我无法在我的活动的 onResume 中添加此代码。谢谢!
【解决方案2】:

试试

AccessToken.getCurrentAccessToken().getToken();

而不是使用 toString() 函数。

【讨论】:

    【解决方案3】:

    我知道这是一张旧票,但似乎没有人给出正确答案。令牌从 toString 中移除,以防止令牌暴露。

    com.facebook.LoggingBehavior(从第 29 行开始):

    /**
     * Indicates that access tokens should be logged as part of the request logging; normally they are not.
     */
    INCLUDE_ACCESS_TOKENS,
    

    com.facebook.AccessToken(从第 322 行开始):

    private String tokenToString() {
        if (this.token == null) {
            return "null";
        } else if (Settings.isLoggingBehaviorEnabled(LoggingBehavior.INCLUDE_ACCESS_TOKENS)) {
            return this.token;
        } else {
            return "ACCESS_TOKEN_REMOVED";
        }
    }
    

    要在 toString 请求中显示令牌,只需在设置中添加日志记录:

        Settings.addLoggingBehavior( LoggingBehavior.INCLUDE_ACCESS_TOKENS );
        this.mUiLifecycleHelper = new UiLifecycleHelper( this, this.mCallback );
        this.mUiLifecycleHelper.onCreate( savedInstanceState );
    

    希望这可以帮助其他有同样问题的人。

    【讨论】:

    • 我对 Access_Token_Removed 有同样的问题,在我为你所说的上面写了 3 行之后。但我得到这个错误:com.facebook.FacebookException:无法创建意图;这可能意味着未安装 Facebook 应用程序。如何在设备上未安装 FB 应用程序的情况下在 FB 上发布图片?我正在使用最新的 SDK3.20。
    • 您的设备上是否安装了 Facebook 应用程序?我需要知道您实现了哪些其他代码才能给出更简洁的答案。
    • 这里获取完整代码paste.org/76322,不。我需要在这两种情况下发布图片。
    • 您需要安装本机 Facebook 应用程序才能使 SDK 服务调用正常工作。
    • 对不起,我听不懂你说什么。请解释清楚。
    【解决方案4】:

    只是提个醒。 这个确切的案例发生在我身上。我的登录停止工作只是因为我在 Manifest.xml 文件中更改了 Activity 启动模式:

    android:launchMode="singleInstance"

    android:launchMode="singleTask"

    所以,我再次将其更改为singleInstance,现在它工作正常。

    【讨论】:

      【解决方案5】:

      这可能是因为您没有在 Facebook 应用中添加 hashkey。查看此链接Generating Hashkey for Android,了解如何生成hashkey

      这也发生在我身上。我在 Facebook 应用程序中添加 hashkey 后它开始工作。

      【讨论】:

      • 直接从 Eclipse 运行和通过运行 APK 运行的 hashkey 会有所不同。你在尝试哪一个?
      • 我正在我的设备上运行该应用程序,我想补充的一件事是我也尝试了 Scrumptions Sample 的 APP_ID,这也不起作用
      • 正如 OP 所说“当我的设备已经安装了 NATIVE FACEBOOK APP 时会出现上述问题,如果我卸载 Facebook 应用程序,它绝对可以正常工作。”。我相信现在hashkey应该没有问题
      • 您的 Facebook 应用中是否启用了 Single Sign OnDeep Linking?此外,该应用不应处于沙盒模式。
      • @Apoorv 我已经进行了单人 On 和 Deep Linking On,还没有任何进展。
      【解决方案6】:

      这是我对新 Facebook SDK 4.1 的有效集成。 首先你需要在 4.1 中初始化 SDK ///

      /** if face book SDK is not initialized then initialized.*/ 
          if(!FacebookSdk.isInitialized())
                 FacebookSdk.sdkInitialize(BaseActivity.this);    
      

      现在你需要回调管理器

      /** create face book callback factory.*/ 
          if(null == callbackManager)
          callbackManager = CallbackManager.Factory.create();
      

      这些是回调。

          public final  FacebookCallback<LoginResult> _mcallbackLogin =    new FacebookCallback<LoginResult>() {
              @Override
              public void onSuccess(LoginResult loginResult) {
      
                  if(loginResult.getAccessToken() != null){
                      Log.i("TAG", "LoginButton FacebookCallback onSuccess token : "+ loginResult.getAccessToken().getToken());
                    GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphJSONObjectCallback() {
                          @Override
                          public void onCompleted(JSONObject object, GraphResponse response) {
                              if(null != object){
                                  Log.e("TAG", object.optString("name"),object.optString("first_name"),object.optString("email"),false).execute();
                              }
                          }
                      }).executeAsync();
                  }
              }
      
              @Override
              public void onCancel() {
                  Log.e("TAG", "LoginButton FacebookCallback onCancel");
              }
      
              @Override
              public void onError(FacebookException exception) {
                  Log.e("TAG","Exception:: "+exception.getStackTrace());
              }
          };
      

      现在您需要在 facebook 登录按钮上注册回调

          loginBtn.registerCallback(BaseActivity.callbackManager,_mcallbackLogin);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多