Android/Java — Отправить простой текст на стену Facebook?

Я пытаюсь интегрировать регистрацию на стену из моего приложения. У меня уже есть область, где пользователь может сохранить его имя пользователя и (зашифрованный) пароль. Я хотел бы, чтобы моя программа вспомнила сохраненное имя пользователя и пароль, передача что к Facebook для аутентификации, и затем позволила приложению отправлять простой текст (возможно, ссылка также) к стене пользователя.

Тем не менее я считал все на страницах разработчика в Facebook (API выглядит абсолютно внешним мне... Я никогда не делал никакого типа разработки веб-приложения прежде... просто настольные приложения), и экспериментировали с библиотеками Java здесь, но честно говоря, я не понимаю ни одной из различных реализаций. Некоторое требование быть простыми в использовании, но по-видимому они - весь путь выше моей головы.

Я даже попытался смешать с официальным Facebook Android SDK, но это использует интерфейс webview, и я не могу передать в имени пользователя и пароле для легкой аутентификации. Плюс, я все еще невежествен относительно того, как отправить на стену даже после корректной аутентификации.

Помогите.Спасибо.

О, btw у меня уже есть ключ API Facebook и Идентификатор приложения.

[ОБНОВИТЕ 1]

Для дальнейшего разъяснения: Если я использую следующий фрагмент кода с официальным Facebook Android SDK http://github.com/facebook/facebook-android-sdk, что я должен сделать затем (после того, как пользователь вошел в систему)? Это неясно мне.

Facebook facebookClient = new Facebook();
facebookClient.authorize(this, "[APP ID]", new String[] {"publish_stream", "read_stream", "offline_access"}, this);

где "это" - Действие, которое реализует DialogListener, и" [идентификатор APP]" является моим идентификатором приложения Facebook.

Спасибо.

[ОБНОВИТЕ 2]

Я нашел решение (см. ниже), хотя единственной вещью, отсутствующей, является способность автозаполнить текстовые поля входа в систему с данными, я сохранил в приложении. Официальный Facebook Android SDK не может допускать это. Я буду продолжать изучать его.

45
задан Amokrane Chentir 26 December 2011 в 11:18
поделиться

2 ответа

Я разобрался с этим, с помощью Тома (спасибо). Ключом было создание диалога с вызовом API "stream.publish", используя Facebook Android SDK. Вот шаги:

  1. Скачайте официальный Facebook Android SDK: http://github.com/facebook/facebook-android-sdk
  2. Импортируйте файлы проекта в Eclipse.
  3. Экспортируйте проект как файл *.jar. (это может вызвать конфликт)

    [UPDATE]

    Facebook недавно обновил исходный код, и я заметил, что файл иконок вызвал конфликты идентификаторов ресурсов в моих проектах (Android 1.5+). Мое решение - забыть об экспорте в формате jar. Вместо этого скопируйте папку Facebook "com" прямо в папку "src" вашего приложения (т.е. "com.facebook.android" должен быть пакетом в вашем приложении... прямо рядом с вашими исходными файлами). Если у вас уже есть папка "com" в папке "src", не беспокойтесь о появляющихся диалоговых окнах о перезаписи файлов, ни один из ваших исходных файлов не должен быть перезаписан. Вернитесь в Eclipse, обновите папку "src", и "com.facebook.android" теперь должен быть в списке пакетов. Скопируйте одну из иконок Facebook в папку "drawable" вашего приложения и обновите ее. Eclipse будет жаловаться на файл "FbDialog.java"... просто добавьте импорт, указывающий на "R" файл вашего приложения, в заголовок этого файла (например, если имя пакета вашего приложения "com.android.myapp", то добавьте следующее: "import com.android.myapp.R;"). Перейдите к пункту #5, если вам нужно сделать следующее.

  4. Добавьте файл .jar в путь сборки вашего проекта

  5. Посмотрите на следующий упрощенный пример кода:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import com.facebook.android.*;
import com.facebook.android.Facebook.DialogListener;

public class FacebookActivity extends Activity implements DialogListener,
        OnClickListener
{

    private Facebook facebookClient;
    private LinearLayout facebookButton;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.test);//my layout xml

        facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout);

    }

    @Override
    public void onComplete(Bundle values)
    {

        if (values.isEmpty())
        {
            //"skip" clicked ?
            return;
        }

        // if facebookClient.authorize(...) was successful, this runs
        // this also runs after successful post
        // after posting, "post_id" is added to the values bundle
        // I use that to differentiate between a call from
        // faceBook.authorize(...) and a call from a successful post
        // is there a better way of doing this?
        if (!values.containsKey("post_id"))
        {
            try
            {
                Bundle parameters = new Bundle();
                parameters.putString("message", "this is a test");// the message to post to the wall
                facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call
            }
            catch (Exception e)
            {
                // TODO: handle exception
                System.out.println(e.getMessage());
            }
        }
    }

    @Override
    public void onError(DialogError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onFacebookError(FacebookError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onCancel()
    {
    }

    @Override
    public void onClick(View v)
    {
        if (v == facebookButton)
        {
            facebookClient = new Facebook();
            // replace APP_API_ID with your own
            facebookClient.authorize(this, APP_API_ID,
                new String[] {"publish_stream", "read_stream", "offline_access"}, this);
        }
    }
}

45
ответ дан 26 November 2019 в 21:27
поделиться

Вот объективный ответ на ваш новый вопрос: «Что мне делать дальше?»

Беглый взгляд на исходный код наводит меня на мысль, что это именно то, что вы делаете:

Проверьте этот URL на наличие REST ( http://en.wikipedia.org/wiki/Representational_State_Transfer ) Методы API, которые вы можете использовать, чтобы оставить комментарий / сообщение:

http://developers.facebook.com/docs/reference/ rest /

В частности, это: http://developers.facebook.com/docs/reference/rest/links.post

Посмотрите строки с 171 по 295 файла Facebook.java. http://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/android/Facebook.java

Чтобы узнать, как использовать API для выполнения этих запросов. .

Возможно, вам понадобится этот метод (он перегружен, см. Код).

        /**
* Make a request to Facebook's old (pre-graph) API with the given
* parameters. One of the parameter keys must be "method" and its value
* should be a valid REST server API method.
*
* See http://developers.facebook.com/docs/reference/rest/
*
* Note that this method blocks waiting for a network response, so do not
* call it in a UI thread.
*
* Example:
* <code>
* Bundle parameters = new Bundle();
* parameters.putString("method", "auth.expireSession");
* String response = request(parameters);
* </code>
*
* @param parameters
* Key-value pairs of parameters to the request. Refer to the
* documentation: one of the parameters must be "method".
* @throws IOException
* if a network error occurs
* @throws MalformedURLException
* if accessing an invalid endpoint
* @throws IllegalArgumentException
* if one of the parameters is not "method"
* @return JSON string representation of the response
*/
    public String request(Bundle parameters) 
1
ответ дан 26 November 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: