Я пытаюсь интегрировать регистрацию на стену из моего приложения. У меня уже есть область, где пользователь может сохранить его имя пользователя и (зашифрованный) пароль. Я хотел бы, чтобы моя программа вспомнила сохраненное имя пользователя и пароль, передача что к 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 не может допускать это. Я буду продолжать изучать его.
Я разобрался с этим, с помощью Тома (спасибо). Ключом было создание диалога с вызовом API "stream.publish", используя Facebook Android SDK. Вот шаги:
Экспортируйте проект как файл *.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, если вам нужно сделать следующее.
Добавьте файл .jar в путь сборки вашего проекта
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);
}
}
}
Вот объективный ответ на ваш новый вопрос: «Что мне делать дальше?»
Беглый взгляд на исходный код наводит меня на мысль, что это именно то, что вы делаете:
Проверьте этот 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)