Не удалось найти информацию о провайдере для com.facebook.katana.provider.AttributionIdProvider

Кто-нибудь знает, что означает эта ошибка? Я получаю его в оболочке LogCat каждый раз, когда я подключаюсь к моему Android-приложению в Facebook (через эмулятор).

Код, который отвечает за полномочия администратора:

@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);
}

Ответ 1

Это может произойти по следующим причинам:

  • Вы не подключены к интернету
  • Вы не получили разрешение на доступ в Интернет (Manifest.xml)
  • Вы не использовали правильную hashkey для приложения
  • Вы не указали правильный идентификатор приложения

Ответ 2

Это просто означает, что у вас нет приложения Facebook, установленного на вашем телефоне. Не беспокойтесь о нем слишком много.

Как работает SDK для Android для Android, каждый раз, когда вам нужно сделать запрос в Facebook, SDK проверяет, установлено ли приложение Facebook на вашем устройстве. Если он установлен, запрос выполняется через приложение. Если приложение не установлено, оно извлекает данные самостоятельно.

Ответ 3

Если какая-либо проблема не была устранена четырьмя решениями, это может помочь. Я получал такую ​​же ошибку, когда начал использовать Фрагменты для реализации входа в 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 перед тем, как вызвать метод facebook.authorize, а если приложение 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;
}

Ответ 6

Не забудьте переопределить onActivityResult и проверить, вызвал ли он (например, если вы используете фрагменты)

PS (может быть, это будет полезно для других, я столкнулся с этой проблемой при использовании parse facebook login =)

Ответ 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. попробуйте один раз