Intereting Posts
OnCreateView () ждет выполнения AsyncTask? Прочитайте 3 выбранного элемента за одно и то же время Используйте слайд-бокс (как в ионном каркасе) в Android Native App с ViewPager Как показать содержимое html в webview с помощью Android Как оценить расстояние между двумя устройствами Android? (Предпочтительнее Bluetooth) BaseAdapter приводит к тому, что ListView выйдет из строя при прокрутке Изменение стиля шрифта в закладках панели действий с помощью Шерлока OnClickListener не запускается для пользовательского представления Как создать динамическую таблицу данных в android? Как установить задержку в функции Android onClick Остановить показ изображений на SD-карте в галерее? Встроенное видео youtube на сенсорном устройстве, отображающее контекстное меню контекстного меню автоматически Switchcompat не отображает коммутатор Ошибка подключения ADB: невозможно создать мост отладки: невозможно запустить сервер adb: невозможно обнаружить версию adb, выход adb Как установить в AutoCompoteTextView выпадающий фон для прозрачного в Android?

Facebook Как кнопка, перенаправляющая на сайт facebook в android

Я разрабатываю facebook как кнопку для интеграции с моим приложением. Вот код html, скопированный с developers.facebook.com

<html> <body> <div id="fb-root"></div> <script> (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=my_app_id"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> <fb:like data-href="http://www.facebook.com/facintegra" data-send="true" data-width="450" data-show-faces="false" data-font="tahoma"/> </body> 

Мой код активности в Android

 mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAppCacheEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); mWebView.loadUrl("file:///android_asset/FacebookLikeView.html"); m_cObjFacebook = new Facebook("Your_id"); authorizefacebook(); } private void authorizefacebook(){ m_cObjFacebook.authorize(this, m_cPermissions, new DialogListener() { @Override public void onComplete(Bundle values) { m_cAccessToken = values.getString(Facebook.TOKEN); } @Override public void onFacebookError(FacebookError error) { System.out.println(error.toString()); } @Override public void onError(DialogError e) { System.out.println(e.toString()); } @Override public void onCancel() { System.out.println("Cancel"); } }); } } 

Когда приложение запускается, он проверяет, вошел ли я в фейсбук или нет. Если нет, он отображает экран входа в facebook для входа в систему, а затем после успешного входа в систему он переходит на мою страницу facebook вместо моей страницы приложения Android.

Если он обнаружил, что я вошел в систему, он дает экран, как показано ниже.

Пожалуйста, помогите мне, куда я иду

Первый экран моего приложения

Мой первый экран

Экран после нажатия кнопки OK

Второй экран

При нажатии на кнопку в моем веб-браузере, его перенаправление на ссылку facebook.com/connect/connect_to_external_page_reload.html. Пожалуйста, помогите мне, что мне делать?

благодаря

Solutions Collecting From Web of "Facebook Как кнопка, перенаправляющая на сайт facebook в android"

Я предполагаю, что веб-просмотр, в котором вы загружаете fb js sdk, просто не имеет файлов cookie, и поэтому пользователь не аутентифицирован.

Как вы аутентифицируете пользователя? Используется ли SSO (то есть установлено ли приложение fb?), Если это так, то браузер (веб-просмотр) не знает, что пользователь аутентифицирован, и когда вы нажимаете его, он просто пытается перенаправить вас на аутентификацию.

Прочтите новое официальное сообщение в блоге: « Привлечение к мобильному» .


редактировать

Ну, это выглядит так, как я догадывался. Вы видите, что он говорит «Зарегистрироваться, чтобы увидеть …», что означает, что js sdk не распознает, что пользователь вошел в систему и прошел аутентификацию.

У вас есть два варианта, о которых я могу думать:
1. Как я писал, используйте новое действие Like и создайте свою собственную «понравившуюся кнопку».
2. При вызове FB.init authResponse параметр authResponse с тем, что у вас есть на android, будет выглядеть примерно так:

Часть Java

 m_cObjFacebook = new Facebook("Your_id"); m_cObjFacebook.authorize(this, m_cPermissions, new DialogListener() { @Override public void onComplete(Bundle values) { String response = m_cObjFacebook.request("me"); JSONObject json = Util.parseJson(response); showWebView(json.getString("id")); } .... }); private void showWebView(String userid) { mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAppCacheEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); StringBuilder url = new StringBuilder("file:///android_asset/FacebookLikeView.html?"); url.append("token=").append(cObjFacebook.getAccessToken()); url.append("&expires=").append(cObjFacebook.getAccessExpires()); url.append("&user=").append(userid); mWebView.loadUrl(url.toString()); } 

Часть HTML / Javascript:

 <script type="text/javascript"> window.fbAsyncInit = function() { var data = {}, query = window.location.search.substring(1); query = query.split("&"); for (var i = 0; i < query.length; i++) { var pair = query[i].split("="); data[pair[0]] = pair[1]; } FB.init({ appId: "YOUR_APP_ID", xfbml: true, authResponse: data }); }; // Load the SDK Asynchronously (function(d){ var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = "//connect.facebook.net/en_US/all.js"; ref.parentNode.insertBefore(js, ref); }(document)); </script> <div class="fb-like" data-href="http://www.facebook.com/FacIntegra" data-send="false" data-width="450" data-show-faces="false" data-font="tahoma"></div> 

Я не уверен на 100%, что этот трюк будет работать, поскольку один из параметров в authResponse – это signedRequest которого у вас нет, но стоит попробовать.


2nd Edit

Когда приложение facebook (katana) существует на устройстве, аутентификация выполняется с его помощью, что означает, что файлы cookie в браузере по умолчанию не созданы, поэтому, когда вы открываете веб-просмотр с помощью подобной кнопки, js sdk не знает, что вы Вы можете думать о нем, как войти в facebook на firefox, а затем открыть фейсбук на хроме и увидеть, что вы не вошли в систему.

Когда приложение fb не установлено, sdk аутентифицирует пользователя, используя диалог с веб-просмотром, который создает куки, которые позже могут использоваться js sdk, поэтому он работает «как ожидалось» в этом сценарии.

Обходной путь, который я дал вам в моем первом редактировании, пытается передать данные аутентификации в sdk, когда он инициализируется.
Как я писал тогда, я не уверен, что это сработает, возможно, вам также нужно передать ему подписанный запрос, но поскольку у вас его нет, вам нужно его создать, если вы хотите попробовать это просто сделать Прямо противоположное тому, что описано здесь: Singed Request , а затем передать его в FB.init вместе с параметрами токена доступа и истечением срока действия.

Другой вариант, который у вас есть, – всегда использовать диалоговое окно для проверки подлинности, чтобы прочитать следующее: Как отключить одноразовый Facebook для Android – Facebook-android-sdk .
Я не рекомендую использовать этот метод, так как это приводит к плохой работе с пользователем, ведь набирать электронную почту и пароль на мобильных устройствах – не самое интересное.

Я попробовал первый вариант, но я вижу только пустой веб-просмотр в приложении для Android.