Не удалось получить токен доступа для facebook на реальном устройстве
У меня была интеграция Facebook в моем проекте, все в порядке на эмуляторе. Когда дело доходит до запуска на реальном устройстве, оно не работает. Я думаю, проблема заключается в токене доступа к Facebook, я не знаю, что делать сейчас? Поэтому я не могу получить информацию о друзьях на реальном устройстве. Может кто-нибудь помочь мне, как получить токен доступа на реальном устройстве.
Я использую Android SDK только для получения информации о друзьях в Facebook.
mFacebook = new Facebook("api_id");
mFacebook.authorize(this, new String[] {
"publish_stream", "read_stream", "offline_access", "friends_birthday", "user_birthday", "email", "read_friendlists", "manage_friendlists"
}, this);
sToken = mFacebook.getAccessToken();
public void onComplete(Bundle values) {
Log.e("oncomplete", "value");
if (values.isEmpty()) {
Log.e("oncomplete", "value is empty");
return;
}
if (!values.containsKey("POST")) {
sToken = mFacebook.getAccessToken();
getFriends()
}
}
private void getFriends() {
try {
sToken = mFacebook.getAccessToken();
StaticUtils.sResponseId = mFacebook.request("me/friends");
Log.w("response", StaticUtils.sResponseId);
try {
JSONObject jObj = Util.parseJson(StaticUtils.sResponseId);
JSONArray jArr = jObj.getJSONArray("data");
for (int i = 0; i < jArr.length(); i++) {
JSONObject jObjFren = jArr.getJSONObject(i);
Iterator it = jObjFren.keys();
while (it.hasNext()) {
String s = (String) it.next();
// Log.w("KEY",s);
String sname = jObjFren.getString(s);
if (s.equals("id")) {
StaticUtils.sFbId.add(sname);
StaticUtils.sFbPics.add(StaticUtils.sImgUrl + sname + "/picture");
} else if (s.equals("name")) {
StaticUtils.sFbName.add(sname.toLowerCase());
}
}
}
} catch (JSONException e) {
Log.w("json exception", e.toString());
} catch (FacebookError e) {
Log.w("facebook exception", e.toString());
}
} catch (MalformedURLException e) {
Log.w("malformed exception", e.toString());
} catch (IOException e) {
Log.w("io exception", e.toString());
}
}
Спасибо,
Амма
Ответы
Ответ 1
Приведенный выше код абсолютно корректен... Проблема в том, что мы уже установили какое-либо приложение facebook на нашем устройстве, которые обновлены, чем мы используем наше приложение, не сработает... Если мы удалим приложения facebook в наше устройство будет работать... и есть еще один способ работать с нашим приложением и другим приложением facebook в нашем устройстве, выполнив следующие шаги:
если u r использует eclipse, то goto
Windows > Предпочтения > Android > Построить и получить путь к хранилищу отладки
теперь откройте терминал и запустите следующую команду
keytool -export -alias androiddebugkey -keystore "путь отладки keystore" | openssl sha1 -binary | openssl enc -a -e
он попросит пароль, затем введите андроид как пароль ur
Теперь добавьте HASH KEY в вашу конфигурацию Facebook API, расположенную @http://www.facebook.com/developers/
на экране "ИЗОБРАЖЕНИЯ" / "Мобильный телефон" и "Устройства".
Теперь мне удалось запустить приложение на устройстве HTC
Ответ 2
Есть еще один ответ на этот вопрос.
Мы можем предварительно установить приложение facebook на наше мобильное устройство, но мы не будем взаимодействовать с уже установленным приложением, т.е. мы не будем использовать единый вход, более известный как SSO (хотя рекомендуется использовать).
У нас этот метод в facebook sdk.
единый вход может быть отключен путем передачи FORCE_DIALOG_AUTH
как параметр activityCode в вашем вызове authorize().
public void authorize(Activity activity, String[] permissions,
int activityCode, final DialogListener listener)
Здесь третий параметр играет роль, то есть activityCode.Now позволяет увидеть ее роль
if (activityCode >= 0) {
singleSignOnStarted = startSingleSignOn(activity, mAppId,
permissions, activityCode);
}
// Otherwise fall back to traditional dialog.
if (!singleSignOnStarted) {
startDialogAuth(activity, permissions);
}
Это означает, что если мы хотим быть нетронутыми с предварительно установленным приложением facebook, мы должны передать activityCode с менее чем 0 (< 0) value.Now в вашем основном действии, когда facebook api называется use
int FORCE_DIALOG_AUTH =-1;
mFacebook.authorize(this, new String[] { "publish_stream",
"read_stream", "offline_access", "friends_birthday",
"user_birthday", "email", "read_friendlists",
"manage_friendlists" },FORCE_DIALOG_AUTH , new LoginDialogListener());
Если мы хотим заставить использовать наследие на основе диалогов, запустите FORCE_DIALOG_AUTH для этого параметр. В противном случае просто опустите этот параметр и Facebook будет использовать подходящее значение по умолчанию.
Это было просто для решения проблемы из SSO.
Ответ 3
вы можете сохранить токен доступа на sharedReference при входе в систему, следуя
public void onComplete(Bundle values)
{
SharedPreferences sp;
Editor editor = sp.edit();
editor.putString("access_token",fb.getAccessToken());
editor.putLong("access_expires",fb.getAccessExpires());
editor.commit();
}
и проверьте этот метод onCreate следующим образом
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facebook_app);
if(access_token != null){
fb.setAccessToken(access_token);
}
if(expires != 0){
fb.setAccessExpires(expires);
}
}