簡體   English   中英

Facebook callbackManager 方法 onActivityResult 未在 Fragment onActivityResult 方法中調用

[英]Facebook callbackManager method onActivityResult not calling in Fragment onActivityResult method

我已經實現了 Facebook 集成,它在初始化的部分工作正常,即使 Facebook APPID 也適用於應用程序。

所以讓我更詳細地解釋一下:我在onCreate()添加並初始化了 Facebook。

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

也在 Fragment Activity 中覆蓋 fragment 中的方法。

@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 方法中沒有被調用。

如果有人有洞察力,請給我任何建議。 歡迎任何意見或建議。

根據 facebook文檔,在片段中,您應該調用此方法

> Java 

loginButton.setFragment(this);
> Kotlin

loginButton.fragment = this

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

-> 在java類globalvaluesclass中添加callbackmanager,activity和fragment都可以訪問

-> 在你的父活動的 onCreate 添加這個 Globalvalues.callbackManager = CallbackManager.Factory.create();

-> 在您的片段中使用 Globalvalues.callbackManager 啟動您的 facebook 登錄類

LoginManager.getInstance().registerCallback(Globalvalues.callbackManager, new 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.
  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    callbackManager.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}

當我使用以下代碼啟動登錄時遇到了這個問題:

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

所以我明確要求使用 Activity 實例作為登錄結果的接收器。 解決方案是提供片段實例,為此存在適當的重載方法:

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

這假設調用來自片段內。

我也遇到了同樣的問題,最初我在設置權限時沒有設置片段引用,所以我修改了我的調用,如下所示:

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")
    )

刪除棄用代碼所需的更改是在logInWithReadPermissions()時傳遞callbackManager引用

使用了 facebook 最新的庫版本:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM