无法找到com.facebook.katana.provider.AttributionIdProvider的提供商信息

时间:2012-10-01 08:45:12

标签: android facebook login logcat

任何人都知道这个错误意味着什么?每次我将我的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);
}

8 个答案:

答案 0 :(得分:54)

由于以下原因,可能会发生这种情况:

  1. 您未连接到互联网
  2. 您尚未获得互联网访问权限(Manifest.xml)
  3. 您没有对应用
  4. 使用正确的hashkey
  5. 您未提供正确的应用ID

答案 1 :(得分:43)

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

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

答案 2 :(得分:4)

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

chan 1,33,1
phoebe 4,55

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

正如@ 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;
}

答案 5 :(得分:1)

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

PS(也许它对其他人有用,我在使用parse facebook登录时遇到了这个麻烦=)

答案 6 :(得分:0)

对我来说(但我使用离子)这是因为在发布之前图片丢失/模板错误:

ionic cordova build android

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

答案 7 :(得分:-7)

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墙。尝试一次