Ответ 1
Это может произойти по следующим причинам:
- Вы не подключены к интернету
- Вы не получили разрешение на доступ в Интернет (Manifest.xml)
- Вы не использовали правильную hashkey для приложения
- Вы не указали правильный идентификатор приложения
Кто-нибудь знает, что означает эта ошибка? Я получаю его в оболочке 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);
}
Это может произойти по следующим причинам:
Это просто означает, что у вас нет приложения Facebook, установленного на вашем телефоне. Не беспокойтесь о нем слишком много.
Как работает SDK для Android для Android, каждый раз, когда вам нужно сделать запрос в Facebook, SDK проверяет, установлено ли приложение Facebook на вашем устройстве. Если он установлен, запрос выполняется через приложение. Если приложение не установлено, оно извлекает данные самостоятельно.
Если какая-либо проблема не была устранена четырьмя решениями, это может помочь. Я получал такую же ошибку, когда начал использовать Фрагменты для реализации входа в Facebook. Я использовал стандартный фрагмент, а не библиотеку поддержки v4 Фрагменты, и после переключения в библиотеку поддержки Fragment моя проблема исчезла. Это может быть уникальным для моей ситуации, но я думал, что поделюсь им на всякий случай. Также не забудьте установить фрагмент, если вы используете метод кнопки входа в систему.
myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class
Просто добавьте следующее разрешение на AndroidManifest.xml
<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
Как сказал @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;
}
Не забудьте переопределить onActivityResult и проверить, вызвал ли он (например, если вы используете фрагменты)
PS (может быть, это будет полезно для других, я столкнулся с этой проблемой при использовании parse facebook login =)
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. попробуйте один раз