Android Webview Facebook Войти - PullRequest
3 голосов
/ 21 июля 2011

В моем приложении я хочу, чтобы пользователи могли войти в систему с помощью своей учетной записи Facebook. После некоторых поисков я могу понять это, хотя я не думаю, что этот способ является лучшим. Я использовал веб-представление в своем пользовательском интерфейсе и веб-клиента для определения переключения URL. Как я понимаю, в Android я должен обрабатывать все перенаправления в моем клиенте webview (перенаправления Facebook, несколько перенаправлений происходят, когда пользователь устанавливает свой адрес электронной почты и пароль). Но все, что мне нужно, это проанализировать мой выходной xml и принять решение в соответствии с выходным результатом (перенаправление на мою домашнюю активность или сбой и т. Д.). Вот мой код, пожалуйста, дайте ваши предложения, если существует более подходящий метод.

public class FbLoginActivity extends Activity {

    String fbLoginBaseUrl = "{my server url}/facebook/redirector.jsp?";
    private ProgressDialog progressBar; 
    WebView webView;
    int count = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fb_login);

        fbLoginBaseUrl += "usdId=NoSession:";
        fbLoginBaseUrl += Subroutines.getInstance().getDeviceId() + "_L";

        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Page is loading...");
        webView.setWebViewClient(new HelloWebViewClient());

        webView.loadUrl(fbLoginBaseUrl);

    }

    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            Log.v(Subroutines.TAG, url);
            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            Log.i(Subroutines.TAG, "Finished loading URL: " +url);

            // if login screen loading finishes, cancel the progressdialog..
            // twice redirecting happens to this sub url..
            String subFace = "m.facebook.com/login.php";
            if(url.indexOf(subFace) != -1 && ++count == 2){
                if (progressBar.isShowing()) {
                    progressBar.cancel();
                }
            }
            // Permission redirecting..
            String loginSub = "www.facebook.com/connect/uiserver.php?method=permissions.request";
            if(url.indexOf(loginSub) != -1){
                progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Logging in...");
            }
            // finally if my server makes a response..
            String sub = "{my server url}/facebook/connect.jsp";
            if(url.indexOf(sub) != -1){
                Log.v(Subroutines.TAG, "my server makes a response..");

                // xml parsing stuff..
                // use url content to parse
            }
        }
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Log.e(Subroutines.TAG, "Error: " + description);
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

Я бы получил Facebook SDK и использовал бы их функции

В двух словах, вы делаете это:

public Facebook facebook = new Facebook("appID");

Затем при создании или где угодно:

facebook.authorize(this,String[] YourNeededPermissions, new DialogListener() {
        @Override
        public void onComplete(Bundle values) {}

        @Override
        public void onFacebookError(FacebookError error) {}

        @Override
        public void onError(DialogError e) {}

        @Override
        public void onCancel() {}
    });

Вы можете увидеть это здесь: http://developers.facebook.com/docs/guides/mobile/#android

2 голосов
/ 17 января 2012

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

РЕДАКТИРОВАТЬ: Facebook только что обновил процедуру входа в систему: https://developers.facebook.com/docs/offline-access-deprecation/, как вы можете видеть, теперь токен, который вы получаете от SSO (или любого другого клиентского токена), связан только с вашим приложением (естьпроверка токена-приложения (секретный идентификатор приложения).Конечная точка теперь

https://graph.facebook.com/oauth/access_token?             
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN 

Таким образом, используя Facebook SDK для Android, выполните следующие действия: 1) подписать пользователя 2) отправить токен на сервер 3) сервер проверит токен по идентификатору своего приложения исекрет приложения 4) добавьте свои собственные функции безопасности

...