22

Facebook SDK と他のカスタム アクティビティの両方からの結果を処理するアクティビティがあります。

自分のアクティビティに同じものを使用しないようにするには、Facebook SDK で使用される requestCode をどこで見つけることができますか?

requestCode を使用してそれらを区別できるはずなonActivityResultので、それらは一意である必要があります。

4

7 に答える 7

33

sdkInitialize呼び出しでリクエスト コードを渡す

FacebookSdk.sdkInitialize(context, 1200);

それで

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (FacebookSdk.isFacebookRequestCode(requestCode)) {
      //Facebook activity result
      //Do your stuff here
      //Further you can also check if it's login or Share etc by using 
      //CallbackManagerImpl as explained by rajath's answer here
      if (requestCode == CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()) {
          //login
      }
      else if (requestCode == CallbackManagerImpl.RequestCodeOffset.Share.toRequestCode()){
         //share
      }
}

ドキュメントから

isFacebookRequestCode(int)

リクエスト コードが Facebook SDK リクエストで使用される範囲内にある場合は true を返します。これには、ダイアログ、ボタン、または LoginManager で明示的に設定したリクエスト コードは含まれません。SDK が使用するリクエスト コードの範囲は、callbackRequestCodeOffset から始まり、次の 100 個の値まで続きます。

sdkInitialize(Context, int)

この関数は Facebook SDK を初期化します。この関数が呼び出されない場合、Facebook SDK 関数の動作は未定です。できるだけ早く呼び出す必要があります。

public static synchronized void sdkInitialize(Context applicationContext, int callbackRequestCodeOffset)
applicationContext アプリケーション コンテキスト
callbackRequestCodeOffsetFacebook アクティビティが呼び出されるリクエスト コード オフセット。設定した値とその後の 100 エントリの間の範囲を他のリクエストで使用しないでください。

于 2015-10-28T13:17:38.367 に答える
13

これを試して:

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

    //Log.iClassMethod();

    switch(requestCode)
    {
        case 1:
            if (resultCode == Activity.RESULT_OK)
            {
                // do something ...
            }
            break;

        case ...:
            if (resultCode == Activity.RESULT_OK)
            {
                // do something ...
            }
            break;

        case Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE:
        {
            Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
            Log.i("Facebook");
        }
        break;
    }
}
于 2013-09-30T09:57:11.107 に答える
3

明確にするために独自のリクエスト コードを設定できます。すべての OpenRequest および NewPermissionsRequest クラスは、requestCode パラメーターを取ります。

setRequestCode

于 2013-07-22T22:47:21.647 に答える
3

LoginButton 経由で FB ログインを使用している場合の代替手段の提供

  1. ログインボタンのリクエストコードを設定する
  2. リクエスト コードを使用してアクティビティを区別する

private LoginButton mFacebookLoginButton;
private static int RC_FB_SIGN_IN;

@Override
protected void onCreate(Bundle savedInstanceState) {
   ...
   mFacebookLoginButton = (LoginButton) findByViewId(R.id.fb_login_button);
   mFacebookLoginButton.registerCallback(...)
   RC_FB_SIGN_IN = mFacebookLoginButton.getRequestCode();
   ...
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_GP_SIGN_IN) {
        ...
    } else if (requestCode == RC_FB_SIGN_IN) {
        Log.i(TAG, "Doing my facebook usual things");
        mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data);
    }
}
于 2015-07-06T04:11:38.877 に答える