android - latest - com.facebook.katana.provider.AttributionIdProvider のプロバイダ情報を見つけることができませんでした




implementation com facebook android facebook login (6)

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

https://code.i-harness.com

誰でもこのエラーの意味を知っていますか? LogCatシェルで、アンドロイドアプリケーションと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);
}

AndroidManifest.xmlに次の権限を追加するだけです

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

これは、次の理由により発生します。

  1. あなたはインターネットに接続されていません
  2. あなたはインターネットアクセス(Manifest.xml)の許可を与えていません。
  3. あなたは正しいhashkeyをアプリに使用していません
  4. あなたは正しいApp Idを提供していません

それはあなたの携帯にFacebookアプリをインストールしていないことを意味します。 それについてあまり心配しないでください。

Android用Facebook SDKの仕組みは、Facebookにリクエストする必要があるときはいつでも、SDKがあなたのデバイスにFacebookアプリが既にインストールされているかどうかを確認することです。 それがインストールされている場合、その要求はアプリケーションを介して行われます。 アプリがインストールされていない場合は、データを単独で取得します。


誰かの問題が4つの解決策で解決されなかった場合、これは役に立ちます。 Facebookのログインを実装するためにFragmentsを使用し始めたとき、私はこの同じエラーを受けていました。 私は、サポートライブラリv4フラグメントではなく、サポートライブラリのフラグメントに切り替えた後で、標準のフラグメントを使用していました。問題はなくなりました。 これは私の状況に固有のことかもしれませんが、私はそれを分かち合うと思っていました。 また、ログインボタンメソッドを使用している場合は、フラグメントを設定することを忘れないでください。

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

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壁に画像をアップロードするためにこのコードを使用しています。 一回試す





logcat