Intereting Posts
RecyclerView – прокрутка до позиции не работает каждый раз Различия в дизайнах макетов Android между версиями 2.3.3 и 4+ Руководство по настройке пользовательского интерфейса Android Studio, Git и три способа слияния Объявление строки массива Как связать любую библиотеку в приложении ndk Пользовательский стиль для штабелированной панели действий? Как я могу манипулировать предварительным просмотром камеры? Возможные состояния для родных потоков на Android? Недействительный хэш ключа, хэш ключа не соответствует какому-либо сохраненному ключу ключа Android – введите имя приложения электронной почты в приложении Почему приложение не совместимо с планшетами после обновления Обратный вызов при отклонении DialogFragment Исключение, возникшее во время рендеринга: java.lang.System.arraycopy ([CI [CII) V Сведения о исключении регистрируются в окне> Показать представление> Журнал ошибок Как получить проект PhoneGap для запуска в Android Studio с системой сборки Gradle

Android Facebook API и ShareLinkContent

Для моей игры Android App Я реализовал кнопку, которая позволяет пользователю делиться результатами игры.

Я интегрировал SDK в Facebook, поэтому все классы известны моему проекту. В манифесте содержатся следующие теги:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" /> <provider android:authorities="com.facebook.app.FacebookContentProvider16..." android:name="com.facebook.FacebookContentProvider" android:exported="true"/> 

Когда я запускаю приложение, я могу поделиться результатами игры с приведенным ниже кодом.

 public void onShareResult(View view){ FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); final ShareDialog shareDialog = new ShareDialog(this); shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { @Override public void onSuccess(Sharer.Result result) { Log.d(LOG_TAG, "success"); } @Override public void onError(FacebookException error) { Log.d(LOG_TAG, "error"); } @Override public void onCancel() { Log.d(LOG_TAG, "cancel"); } }); if (shareDialog.canShow(ShareLinkContent.class)) { ShareLinkContent linkContent = new ShareLinkContent.Builder() .setContentTitle("Game Result Highscore") .setContentDescription("My new highscore is " + sum.getText() + "!!") .setContentUrl(Uri.parse("https://play.google.com/store/apps/details?id=de.ginkoboy.flashcards")) //.setImageUrl(Uri.parse("android.resource://de.ginkoboy.flashcards/" + R.drawable.logo_flashcards_pro)) .setImageUrl(Uri.parse("http://bagpiper-andy.de/bilder/dudelsack%20app.png")) .build(); shareDialog.show(linkContent); } } 

Однако есть некоторые вещи, которые я не понимаю.

  • Общая ссылка отличается от того, что я вижу в диалоговом окне перед отправкой.
  • Изображения, кажется, были доступны через Интернет. Т.е. невозможно установить образ ресурса из моего проекта.

Кроме того, у меня есть некоторые проблемы с пониманием того, что требуется Facebook.

Вот как Facebook показывает мое сообщение:

Вот как Facebook показывает мое сообщение:

И вот как мое приложение, кажется, публикует контент

И вот как мое приложение, кажется, публикует контент

Итак, вопрос: где мой заголовок и описание ушли ???

С наилучшими пожеланиями

Оливер

Solutions Collecting From Web of "Android Facebook API и ShareLinkContent"

Итак, я узнал, почему мой заголовок и описание не были видны в facebook.

Прежде всего спасибо @mustafasevgi, но ваше решение относится к SDK 3.5.x, где я пытался использовать SDK 4.0

Возвращаясь к решению …

Я узнал, что настроил свой контент Url для своего приложения в Google Play Store. Если вы настроили URL-адрес контента за пределами Google Play Store, название и описание не будут перезаписаны.

Facebook sdk 3.X с использованием этого кода. Вы можете использовать WebDialog.

 import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.facebook.FacebookException; import com.facebook.FacebookOperationCanceledException; import com.facebook.Request; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.model.GraphUser; import com.facebook.widget.WebDialog; import com.facebook.widget.WebDialog.OnCompleteListener; public class FaceShare extends Activity { String link = "", id = "", pic = "", title = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = getIntent(); Bundle b = i.getExtras(); // link = b.getString("link"); // id = b.getString("id"); // pic = b.getString("pic"); // title = b.getString("title"); try { // start Facebook Login Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { // make request to the /me API Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { } // callback after Graph API response with user object }).executeAsync(); publishFeedDialog(title, "title", "caption", link, pic); } } // callback when session changes state }); } catch (Exception e) { Log.e("FACE", e.toString()); finish(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } private void publishFeedDialog(String name, String caption, String description, String link, String urlPicture) { Bundle params = new Bundle(); // params.putString("name", name); // params.putString("caption", caption); // params.putString("description", description); // params.putString("link", link); // params.putString("picture", urlPicture); params.putString("name", "name"); params.putString("caption", "caption"); params.putString("description", "description"); params.putString("link", "https://s-media-cache-ak0.pinimg.com/236x/1b/2b/19/1b2b19519b1b3439f783181026d9872b.jpg"); params.putString("picture", "https://s-media-cache-ak0.pinimg.com/236x/1b/2b/19/1b2b19519b1b3439f783181026d9872b.jpg"); Session session = Session.getActiveSession(); WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(FaceShare.this, session, params)).setOnCompleteListener(new OnCompleteListener() { public void onComplete(Bundle values, FacebookException error) { if (error == null) { // When the story is posted, echo the success // and the post Id. final String postId = values.getString("post_id"); if (postId != null) { Toast.makeText(getApplicationContext(), "Shared.", Toast.LENGTH_LONG).show(); finish(); } else { finish(); } } else if (error instanceof FacebookOperationCanceledException) { finish(); } else { Toast.makeText(getApplicationContext(), "error occured, try again", Toast.LENGTH_LONG).show(); finish(); } } }) .build(); feedDialog.show(); } } 

Я использовал систему WebDialog, но у меня есть это сообщение:

Невозможно использовать SessionLoginBehavior SSO_WITH_FALLBACK, когда com.facebook.LoginActivity не объявлен как активность в AndroidManifest.xml

Кто-нибудь знает почему?