【问题标题】:Facebook callbackManager method onActivityResult not calling in Fragment onActivityResult methodFacebook callbackManager 方法 onActivityResult 没有在 Fragment onActivityResult 方法中调用
【发布时间】:2016-10-22 19:51:30
【问题描述】:

我已经实现了 Facebook 集成,它在部分初始化中运行良好,即使 Facebook APPID 也适用于应用程序。

所以让我更详细地解释一下: 我已在onCreate() 中添加并初始化 Facebook。

// Facebook callback manager
callbackManager = CallbackManager.Factory.create();

在 Fragment Activity 和 Fragment Activity 中也覆盖一个方法。

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

ActivityFragment 类中的此方法相同。

但问题是当我要求 facebook AppInviteContent 显示 AppInviteDialog 时,它在 Activity 中被完美地调用 onActivityResult 方法,但在 Fragment 方法中没有被调用。 p>

如果有人有见识,请给我任何建议。欢迎任何意见或建议。

【问题讨论】:

    标签: android facebook facebook-graph-api android-fragments android-studio


    【解决方案1】:

    根据facebookdocumentations,在一个片段中,你应该调用这个方法

    > Java 
    
    loginButton.setFragment(this);
    
    > Kotlin
    
    loginButton.fragment = this
    

    【讨论】:

      【解决方案2】:

      在stackoverflow中找不到解决方案,所以我自己做了这个

      ->在java类globalvaluesclass中添加callbackmanager,activity和fragment都可以访问

      ->在你的父活动的 onCreate 中添加这个 Globalvalues.callbackManager = CallbackManager.Factory.create();

      ->在你的片段中开始你的 facebook 登录类 Globalvalues.callbackManager

      LoginManager.getInstance().registerCallback(Globalvalues.callbackManager, 新的 FacebookCallback() {

      #all that fb stuff
      

      }

      -> 在你的父活动中覆盖 onactivity 结果。

      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
      
             fragment.customOnActivityResult(requestCode, resultCode, data);
      
      }
      
      and in your fragment add a function for example as shown below
      
            public static void customOnActivityResult(){
                super.onActivityResult(requestCode, resultCode, data);
          Globalvalues.callbackManager.onActivityResult(requestCode, resultCode,
            data);
      
        }
      
                                                             and you're Welcome.
      

      【讨论】:

      • 我的onActivityResult()callbackManager.onActivityResult(requestCode, resultCode, data); 中有一行,但startActivityForResult(..) 已被弃用,因此我们无法通过并获取上述行中需要的requestCodecallbackManager... )在这里看到错误..prnt.sc/1wpspcz,如果您有任何解决方案,请告诉我们..
      【解决方案3】:
        @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          callbackManager.onActivityResult(requestCode, resultCode, data);
          super.onActivityResult(requestCode, resultCode, data);
      }
      

      【讨论】:

        【解决方案4】:

        我在使用以下代码启动登录时遇到了这个问题:

        LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList(EMAIL));
        

        所以我明确要求使用 Activity 实例作为登录结果的接收者。解决方案是提供片段实例,其中存在适当的重载方法:

        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(EMAIL));
        

        这假设调用来自片段内。

        【讨论】:

          【解决方案5】:

          我也遇到了同样的问题,最初我在设置权限时没有设置片段引用,所以我修改了我的调用如下:

          loginManagerFb.logInWithReadPermissions(
               this,
               listOf("public_profile", "email")
          )
          

          但我仍然面临这个问题,callbackManager 没有被调用,所以我添加了onActivityResult(),如下所示:

          override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
              super.onActivityResult(requestCode, resultCode, data)
              callbackManager.onActivityResult(requestCode, resultCode, data)
          }
          

          上述代码的问题是 onActivityResult 现在已被弃用,因此为了删除弃用的代码,我将代码修改如下:

          val loginManagerFb = LoginManager.getInstance()
               loginManagerFb.logInWithReadPermissions(
                   this,
                   callbackManager,
                   listOf("public_profile", "email")
              )
          

          删除不推荐使用的代码所需的更改是传递 callbackManager 引用,而 logInWithReadPermissions()

          使用了 facebook 最新的库版本:

          implementation "com.facebook.android:facebook-android-sdk:12.0.0"
          

          【讨论】:

            猜你喜欢
            • 2013-12-19
            • 2013-05-02
            • 1970-01-01
            • 2019-07-20
            • 1970-01-01
            • 2015-04-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多