51

このエラーの意味を知っている人はいますか? AndroidアプリケーションをFacebookに(エミュレーター経由で)接続するたびに、LogCatシェルで取得します。

認証機能を担当するコード:

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

8 に答える 8

54

これは、次の理由で発生する可能性があります。

  1. インターネットに接続していません
  2. インターネット アクセスの許可が与えられていません (Manifest.xml)
  3. アプリに正しいハッシュキーを使用していません
  4. 正しいアプリ ID が指定されていません
于 2012-11-21T11:10:02.867 に答える
44

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

Facebook SDK for Android の仕組みは、Facebook にリクエストを行う必要があるときはいつでも、SDK が Facebook アプリがデバイスに既にインストールされているかどうかを確認することです。インストールされている場合、リクエストはアプリを通じて行われます。アプリがインストールされていない場合、アプリ自体がデータをフェッチします。

于 2012-10-01T09:02:23.743 に答える
4

4 つの解決策を試しても問題が解決されなかった場合は、これが役立つ可能性があります。Fragments を使用して Facebook ログインを実装し始めたときに、この同じエラーが発生しました。サポート ライブラリ v4 Fragments ではなく標準 Fragment を使用していましたが、サポート ライブラリ Fragment に切り替えた後、問題は解決しました。これは私の状況に固有のものかもしれませんが、念のため共有したいと思います。また、ログイン ボタン方式を使用している場合は Fragment を設定することを忘れないでください。

myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class
于 2015-05-20T03:05:54.593 に答える
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;
}
于 2013-03-06T17:00:15.437 に答える
1

onActivityResult をオーバーライドして、それが呼び出されたかどうかを確認することを忘れないでください (たとえば、フラグメントを使用している場合)。

PS(多分それは他の人にとって役立つでしょう、私は解析Facebookログインを使用していたときにこの問題に直面しました=)

于 2014-12-17T10:00:39.663 に答える
1

次のアクセス許可を AndroidManifest.xml に追加するだけです。

<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
于 2013-01-05T16:22:51.810 に答える
-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 ウォールにアップロードしています。一度やってみる

于 2012-10-01T12:00:23.930 に答える