Как опубликовать на стене Facebook с помощью Android android SDK без открытия диалогового окна
Я использую facebook sdk, и с помощью приведенного примера с этим SDK я разработал код для входа и сохранения access_token в базу данных
У меня есть 2 проблемы:
1). когда я пытаюсь получить access_token из базы данных и передать его в facebook, он не позволяет мне публиковать на стене, используя этот пример, данный с помощью этой facebook sdk, почему это так?
2). Я прошел через этот код facebook.java, но я получил то, что для публикации на стене мне нужно открыть диалоговое окно, так как нет другого способа передать мое сообщение сразу и отправить сообщение. Пожалуйста, скажите мне решение по нему или tel me wat, если я хочу публиковать на стене, не открывая диалоговое окно
mPostButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String message = "Post this to my wall";
Bundle params = new Bundle();
params.putString("message", message);
mAsyncRunner.request("me/feed", params, "POST", new WallPostRequestListener());
}
});
public class WallPostRequestListener extends BaseRequestListener {
public void onComplete(final String response) {
Log.d("Facebook-Example", "Got response: " + response);
String message = "<empty>";
try {
JSONObject json = Util.parseJson(response);
message = json.getString("message");
} catch (JSONException e) {
Log.w("Facebook-Example", "JSON Error in response");
} catch (FacebookError e) {
Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
}
final String text = "Your Wall Post: " + message;
Example.this.runOnUiThread(new Runnable() {
public void run() {
mText.setText(text);
}
});
}
}
Что не так с вышеприведенным кодом.. его не публиковать на стене и давать мне Wall Post: пусто на телефоне и эмуляторе как
Спасибо заранее.
Ответы
Ответ 1
i применил следующий код и смог успешно опубликовать мое сообщение на стене.
public void postOnWall(String msg) {
Log.d("Tests", "Testing graph API wall post");
try {
String response = mFacebook.request("me");
Bundle parameters = new Bundle();
parameters.putString("message", msg);
parameters.putString("description", "test test test");
response = mFacebook.request("me/feed", parameters,
"POST");
Log.d("Tests", "got response: " + response);
if (response == null || response.equals("") ||
response.equals("false")) {
Log.v("Error", "Blank response");
}
} catch(Exception e) {
e.printStackTrace();
}
}
Ответ 2
Я обновил свой учебник в http://www.integratingstuff.com/2010/10/14/integrating-facebook-into-an-android-application/, и теперь он точно отвечает на этот вопрос.
Он основан и в основном так же, как и на Ankit, но направляет людей от начала до конца посредством реализации всего процесса.
Ответ 3
Ну, это не то, что что-то публикуется на стене, не сообщая пользователю. Когда пользователь разрешает ваше приложение, тогда Android-sdk представляет другую страницу, на которой есть текст, который посылают ваши приложения, и текстовое поле, где пользователь может писать на стене, подобно скриншоту, который я приложил
Фактическое расположение на мобильном устройстве несколько отличается, но оно в том же формате. Этот процесс хорошо показан в примерах примеров facebook android sdk.
Теперь проверьте вопрос, заданный в этом сообщении:
Facebook Connect Android - используя stream.publish @http://api.facebook.com/restserver.php ' > Facebook Connect Android - используя stream.publish @http://api.facebook.com/restserver.php
В этом вопросе их искать: postParams.put(), похожие строки будут присутствовать в некоторых ваших JAVA файлах. Это строки, в которых вы можете публиковать данные в Facebook.
Например:
postParams.put("user_message", "TESTING 123");
- это сообщение,
postParams.put("attachment", "{\"name\":\"Facebook Connect for Android\",\"href\":\"http://code.google.com/p/fbconnect-android/\",\"caption\":\"Caption\",\"description\":\"Description\",\"media\":[{\"type\":\"image\",\"src\":\"http://img40.yfrog.com/img40/5914/iphoneconnectbtn.jpg\",\"href\":\"http://developers.facebook.com/connect.php?tab=iphone/\"}],\"properties\":{\"another link\":{\"text\":\"Facebook home page\",\"href\":\"http://www.facebook.com\"}}}");
- это строка, в которой вы указываете значок приложения, описания, заголовка, заголовка и т.д.
![alt text]()
Ответ 4
Я использовал код Ankit для публикации на стене facebook, но его код дал мне ошибку android.os.NetworkOnMainThreadException
.
После поиска по этой проблеме решение подсказывало мне, чтобы ваш код в AsyncTask
избавился от этой проблемы. После изменения кода он отлично работает для меня.
Измененный код выглядит следующим образом:
public class UiAsyncTask extends AsyncTask<Void, Void, Void> {
public void onPreExecute() {
// On first execute
}
public Void doInBackground(Void... unused) {
// Background Work
Log.d("Tests", "Testing graph API wall post");
try {
String response = facebook.request("me");
Bundle parameters = new Bundle();
parameters.putString("message", "This test message for wall post");
parameters.putString("description", "test test test");
response = facebook.request("me/feed", parameters, "POST");
Log.d("Tests", "got response: " + response);
if (response == null || response.equals("") || response.equals("false")) {
Log.v("Error", "Blank response");
}
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
public void onPostExecute(Void unused) {
// Result
}
}
Ответ 5
Этот класс помогает мне отправлять отправленные сообщения на мой экран Facebook БЕЗ:
public class FBManager{
private static final String FB_ACCESS_TOKEN = "fb_access_token";
private static final String FB_EXPIRES = "fb_expires";
private Activity context;
private Facebook facebookApi;
private Runnable successRunnable=new Runnable(){
@Override
public void run() {
Toast.makeText(context, "Success", Toast.LENGTH_LONG).show();
}
};
public FBManager(Activity context){
this.context = context;
facebookApi = new Facebook(FB_API_ID);
facebookApi.setAccessToken(restoreAccessToken());
}
public void postOnWall(final String text, final String link){
new Thread(){
@Override
public void run(){
try {
Bundle parameters = new Bundle();
parameters.putString("message", text);
if(link!=null){
parameters.putString("link", link);
}
String response = facebookApi.request("me/feed", parameters, "POST");
if(!response.equals("")){
if(!response.contains("error")){
context.runOnUiThread(successRunnable);
}else{
Log.e("Facebook error:", response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void save(String access_token, long expires){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor=prefs.edit();
editor.putString(FB_ACCESS_TOKEN, access_token);
editor.putLong(FB_EXPIRES, expires);
editor.commit();
}
public String restoreAccessToken(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getString(FB_ACCESS_TOKEN, null);
}
public long restoreExpires(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getLong(FB_EXPIRES, 0);
}
}