Я только что нашел отличный образец Facebook Connect на Blackberry от Eki Y. Baskoro,
Ниже приводится краткое руководство по использованию Facebook Connect на Blackberry. Я создал простой Facade, инкапсулирующий API REST Facebook, а также добавил «грубый» подход MVC для навигации по экрану. Я тестировал на JDE 4.5 с использованием симулятора 8320. Эта работа еще не завершена, и вся работа под лицензией.
Отлично подходит для чтения.
NB Не забудьте получить ключ приложения Facebook и установить его в классе TestBB.
Но теперь я хочу опубликовать что-нибудь на моей стене. Поэтому я добавил новый метод в класс FacebookFacade, используя Stream.publish API :
/***
* Publishes message to the stream.
* @param message - message that will appear on the facebook stream
* @param targetId - The ID of the user, Page, group, or event where
* you are publishing the content.
*/
public void streamPublish(String message, String targetId)
{
Hashtable arguments = new Hashtable();
arguments.put("method", "stream.publish");
arguments.put("message", message);
arguments.put("target_id", targetId);
try {
JSONObject result = new JSONObject(
int new JSONTokener(sendRequest(arguments)));
int errorCode = result.getInt("error_code");
if (errorCode != 0) System.out.println("Error Code: "+errorCode);
} catch (Exception e) {
System.out.println(e);
}
}
/***
* Publishes message on current user wall.
* @param message - message that will appear on the facebook stream
*/
public void postOnTheWall(String message)
{
String targetId = String.valueOf(getLoggedInUserId());
streamPublish(message, targetId);
}
Это вернет код ошибки 200: «Пользователь не авторизовал приложение для выполнения этого действия»
Сначала я подумал, что это связано с Facebook -> Настройки приложения -> Дополнительные разрешения -> Опубликовать недавние действия (однострочные) на моей стене , но даже проверил, без разницы ...
Тогда я нашел это сообщение , объясняющее эту проблему, связанную с расширенными разрешениями .
Это, в свою очередь, должно быть исправлено путем небольшого изменения URL в классе LoginScreen :
public LoginScreen(FacebookFacade facebookFacade) {
this.facebookFacade = facebookFacade;
StringBuffer data = new StringBuffer();
data.append("api_key=" + facebookFacade.getApplicationKey());
data.append("&connect_display=popup");
data.append("&v=1.0");
//revomed
//data.append("&next=http://www.facebook.com/connect/login_success.html");
//added
data.append("&next=http://www.facebook.com/connect/prompt_permissions.php?" +
"api_key="+facebookFacade.getApplicationKey()+"&display=popup&v=1.0"+
"&next=http://www.facebook.com/connect/login_success.html?"+
"xxRESULTTOKENxx&fbconnect=true" +
"&ext_perm=read_stream,publish_stream,offline_access");
data.append("&cancel_url=http://www.facebook.com/connect/login_failure.html");
data.append("&fbconnect=true");
data.append("&return_session=true");
(new FetchThread("http://m.facebook.com/login.php?"
+ data.toString())).start();
}
К сожалению, это не работает. Код ошибки 200 в ответ на запрос stream.publish ...
У вас есть предложения, как решить эту проблему?
Спасибо!