【问题标题】:Failed to find provider info for com.facebook.katana.provider.AttributionIdProvider找不到 com.facebook.katana.provider.AttributionIdProvider 的提供商信息
【发布时间】:2012-09-22 02:37:44
【问题描述】:

有人知道这个错误是什么意思吗?每次我将我的 android 应用程序连接到 Facebook(通过模拟器)时,我都会在 LogCat shell 中得到它。

负责授权功能的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.authorize);
    mPrefs = getPreferences(MODE_PRIVATE);
    loginPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);
    if(access_token != null) {
        Singelton.mFacebook.setAccessToken(access_token);
    }
    if(expires != 0) {
        Singelton.mFacebook.setAccessExpires(expires);
    }

    Singelton.mFacebook.authorize(this, new String[] {"email","user_birthday"}, new DialogListener() {
        @Override
        public void onComplete(Bundle values) {
            SharedPreferences.Editor editor = mPrefs.edit();
            editor.putString("access_token", Singelton.mFacebook.getAccessToken());
            editor.putLong("access_expires", Singelton.mFacebook.getAccessExpires());
            editor.commit();
            SharedPreferences.Editor logEditor = loginPref.edit();
            logEditor.putBoolean("login", true);
            logEditor.commit();
            addUser();
        }

        @Override
        public void onFacebookError(FacebookError error) {
            errorHandler();
        }

        @Override
        public void onError(DialogError e) {
            errorHandler();
        }

        @Override
        public void onCancel() {
            Log.d("MyApp", "Facebook cancel");
        }
    });

}

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

【问题讨论】:

  • 我得到了这个错误,但是验证仍然有效...根据源代码,它是用于应用安装转换跟踪的,所以我不会太担心。

标签: android facebook login logcat


【解决方案1】:

这可能是由于以下原因造成的:

  1. 您未连接到互联网
  2. 您没有授予 Internet 访问权限 (Manifest.xml)
  3. 您没有为应用使用正确的hashkey
  4. 您没有提供正确的应用 ID

【讨论】:

  • 对我来说第二个建议有效(互联网许可)。但这仅在未安装 Facebook 应用程序时才相关。如果安装了 Facebook 应用程序,您将获得常规的 Facebook 登录屏幕。以防万一 Facebook 应用程序未找到(或未更新)需要互联网访问,因为它依赖于执行登录而不是使用 SSO 的 WebView 登录。
  • 就我而言,它是#3。我正在使用示例应用程序 ID。您必须在 strings.xml 中更新您自己的应用程序 ID。
  • 在我的情况下,它在 LoginActivity 中是 no_history:true。似乎 Facebook 不希望该活动没有历史记录。在这个废话上浪费了 2 个小时 :(
  • 在我的例子中,我把 标签放在了错误的地方 %)
  • @OWADVL 哇,我刚刚删除了 noHistory:true 并且它起作用了.. 我已经在这 2 天了。甚至向他们发送了错误报告,但我无法解决问题......非常感谢......我真的很沮丧。
【解决方案2】:

这只是意味着您的手机上没有安装 Facebook 应用程序。不用太担心。

Android 版 Facebook SDK 的工作方式是,每当您需要向 Facebook 发出请求时,SDK 都会检查您的设备上是否已安装 Facebook 应用。如果已安装,则通过应用程序发出请求。如果应用未安装,它会自行获取数据。

【讨论】:

  • 但我确实安装了 Facebook 应用程序(彻底安装 adb)。此外,我在使用模拟器登录 Facebook 时遇到问题 - 它只是卡在 facebook 空白页面上(在 Galaxy S 上,相同的代码可以正常工作)。可能是什么问题?
  • 我不确定是不是代码 - 当我在没有 SSO 的情况下强制登录时(授权中的 mFacebook.FORCE_DIALOG_AUTH),它确实有效。 android模拟器上的facebook应用可能有问题吗?
  • 不,我用过没有任何问题。同样,如果您可以将 LoginActivity 的代码添加到您的问题中,我们可以查看问题所在并为您提供帮助。
  • 附在上面。提前致谢
  • 是的 :( 虽然我解决了最初的问题 - 安装较新版本的 facebook 应用程序后,katana 错误消失了。当我设置不正确的 API 密钥时,我得到一个错误,但是当我发送正确的,我刚得到一个空的 facebook - 并且在完成授权后永远不会返回。
【解决方案3】:

如果这四种解决方案没有解决任何人的问题,这可能会有所帮助。当我开始使用 Fragments 实现 Facebook 登录时,我遇到了同样的错误。我使用的是标准片段而不是支持库 v4 片段,在切换到支持库片段后,我的问题就消失了。这可能是我的情况所独有的,但我想我会分享它以防万一。如果您使用登录按钮方法,也不要忘记设置 Fragment。

myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class

【讨论】:

    【解决方案4】:

    只需将以下权限添加到 AndroidManifest.xml

    <uses-permission android:name="android.permission.SET_DEBUG_APP"/>
    

    【讨论】:

      【解决方案5】:

      正如@Vinay-S-Shenoy 所说,当 Facebook 应用程序未安装在手机或模拟器上时,就会发生这种情况。为了避免这个错误,我要做的是在调用 facebook.authorize 方法之前检查 Facebook 应用程序是否已安装,以防 Facebook 应用程序未安装,我会将此消息提醒用户。

      public boolean isFacebookAvailable() {
      
          Intent intent = new Intent(Intent.ACTION_SEND);
      intent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
      intent.setType("text/plain");
      
          final PackageManager pm = this.getApplicationContext().getPackageManager();
          for(ResolveInfo resolveInfo: pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)){
              ActivityInfo activity = resolveInfo.activityInfo;
              // Log.i("actividad ->", activity.name);
              if (activity.name.contains("com.facebook.katana")) {
                  return true;
              }
          }
          return false;
      }
      

      【讨论】:

      • 这已被弃用,你不应该使用它!!!!新的 sdk 检查是否安装了应用程序,如果未安装,则使用 webview 登录。所以,不要使用这个解决方案。
      • @242Eld 我相信 3.1 已经有了 webview 登录(注册)功能。我们必须在带有 fb sdk 3.0 的应用程序上实现此代码
      【解决方案6】:

      不要忘记覆盖 onActivityResult 并检查它是否被调用(例如,如果你使用片段)

      PS(也许对其他人有用,我在使用 parse facebook login 时遇到了这个问题=)

      【讨论】:

        【解决方案7】:

        对我来说(但我使用 ionic),这是因为在启动之前缺少图像/模板错误:

        ionic cordova build android
        

        也许它可以帮助别人......

        【讨论】:

          【解决方案8】:
          btnFb_photo_post.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // postPhotoToWall(facebook.getAccessToken());
                  facebook.authorize(MyFBTestActivity.this,
                      new String[] { "publish_stream" },
                      new DialogListener() {
                          @Override
                          public void onFacebookError(FacebookError e) {
                              // TODO Auto-generated method stub
                              Toast.makeText(getApplicationContext(),
                              e.getMessage(), Toast.LENGTH_LONG).show();
                          }
          
                          @Override
                          public void onError(DialogError dialogError) {
                              // TODO Auto-generated method stub
                              Toast.makeText(getApplicationContext(),
                              dialogError.getMessage(),
                              Toast.LENGTH_LONG).show();
                          }
          
                          @Override
                          public void onComplete(Bundle values) {
                              postToWall(values.getString(Facebook.TOKEN));
                          }
          
                          private void postToWall(String accessToken) {
                              // Toast.makeText(getApplicationContext(),
                              // "trying", Toast.LENGTH_LONG).show();
                              byte[] data = null;
                              Bitmap bi = BitmapFactory.decodeResource(
                                  getResources(), 
                                  R.drawable.ic_launcher
                              );
                              ByteArrayOutputStream baos = new ByteArrayOutputStream();
                              bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                              data = baos.toByteArray();
                              Bundle params = new Bundle();
                              // if (facebook.getAccessToken() != null)
                              params.putString(Facebook.TOKEN,
                                  facebook.getAccessToken()
                              );
          
                              params.putString("method", "photos.upload");
                              params.putString("caption", "www.samplelink.com");
                              // params.putString("message",
                              // "www.google.com");
          
                              params.putByteArray("picture", data);
                              AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
                              mAsyncRunner.request(null, params, "POST",
                                  new SampleUploadListener(), null);
                              }
          
                              @Override
                              public void onCancel() {
                                  // TODO Auto-generated method stub
                              }
                          }
                      );
                  }
              });
          

          我正在使用此代码将图像上传到 FB 墙。试一次

          【讨论】:

          • 请解释这是如何回答问题的
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-26
          • 1970-01-01
          • 1970-01-01
          • 2013-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多