51 votes

Impossible de trouver les informations sur le fournisseur pour com.facebook.katana.provider.AttributionIdProvider

Quelqu'un sait-il ce que signifie cette erreur ? Je l'obtiens dans le shell LogCat chaque fois que je me connecte avec mon application Android à Facebook (via l'émulateur).

Le code qui se charge de la fonctionnalité d'autorisation :

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

0 votes

J'obtiens cette erreur mais l'authentification fonctionne quand même... D'après le code source, c'est pour le suivi de la conversion des installations d'applications, donc je ne m'en inquièterais pas trop.

54voto

AnhSirk Dasarp Points 3299

Cela peut se produire pour les raisons suivantes :

  1. Vous n'êtes pas connecté à l'internet
  2. Vous n'avez pas donné la permission d'accéder à Internet ( Manifest.xml)
  3. Vous n'avez pas utilisé une Clé de hachage pour l'application
  4. Vous n'avez pas fourni un App Id correct

2 votes

Pour moi, la deuxième suggestion a fonctionné (permission INTERNET). Mais cela n'est pertinent que lorsque l'application Facebook n'est pas installée. Si l'application Facebook est installée, vous obtiendrez l'écran de connexion Facebook habituel. C'est seulement dans le cas où l'application Facebook n'est pas trouvée (ou n'est pas mise à jour) que l'accès à Internet est requis puisqu'elle se rabat sur la connexion WebView qui effectue la connexion au lieu d'utiliser le SSO.

1 votes

Dans mon cas, c'était le numéro 3. J'utilisais l'identifiant de l'application modèle. Vous devez mettre à jour votre propre identifiant d'application dans strings.xml.

1 votes

Dans mon cas, c'était no_history:true dans la LoginActivity. Il semble que Facebook ne veuille pas que l'activité n'ait pas d'historique. J'ai perdu 2 heures sur cette connerie :(

43voto

Vinay S Shenoy Points 2816

Cela signifie simplement que l'application Facebook n'est pas installée sur votre téléphone. Ne vous inquiétez pas trop à ce sujet.

Le SDK de Facebook pour Android fonctionne de la manière suivante : chaque fois que vous devez faire une demande à Facebook, le SDK vérifie si l'application Facebook est déjà installée sur votre appareil. Si elle est installée, la requête est effectuée par l'intermédiaire de l'application. Si l'application n'est pas installée, il va chercher les données lui-même.

6 votes

Mais j'ai installé l'application Facebook (installation adb complète). J'ai également un problème pour me connecter à Facebook avec l'émulateur - il est juste bloqué sur la page vide de Facebook (sur le galaxy S le même code fonctionne bien). Quel peut être le problème ?

0 votes

Je ne suis pas sûr que ce soit le code - lorsque je force la connexion sans SSO (mFacebook.FORCE_DIALOG_AUTH dans authorize), cela fonctionne. Peut-être est-ce un problème avec l'application Facebook sur l'émulateur Android ?

0 votes

Non, je l'ai utilisé sans aucun problème. Encore une fois, si vous pouvez ajouter le code de votre LoginActivity à votre question, nous pourrons voir quel est le problème et vous aider.

1voto

M.ES Points 407

Il suffit d'ajouter la permission suivante au fichier AndroidManifest.xml

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

1voto

vrunoa Points 317

Comme l'a dit @Vinay-S-Shenoy, cela se produit lorsque l'application Facebook n'est pas installée sur le téléphone ou le simulateur. Ce que je fais, pour éviter cette erreur est de vérifier si l'application Facebook est installée avant d'appeler la méthode facebook.authorize, et dans le cas où l'application Facebook n'est pas installée, j'alerte l'utilisateur avec ce message.

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

3 votes

Ceci est obsolète, vous ne devriez pas l'utiliser !!!! Le nouveau sdk vérifie si l'application est installée, et si elle ne l'est pas, il utilise une vue web pour se connecter. Donc, n'utilisez pas cette solution.

0 votes

@242Eld Je crois que la version 3.1 possède déjà la fonctionnalité de connexion (enregistrement) de la webview. Nous devons implémenter ce code sur une application avec fb sdk 3.0.

-7voto

Hemanth Points 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
                    }
                }
            );
        }
    });

j'utilise ce code pour télécharger une image sur le mur FB. essayez une fois

14 votes

Veuillez expliquer en quoi cela répond à la question

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X