草庐IT

Android Webview Facebook 登录

coder 2023-12-27 原文

在我的应用程序中,我想让用户能够使用他们的 Facebook 帐户登录。经过一些搜索,我能够弄清楚这一点,尽管我认为这种方式不是最好的方法。我在我的 UI 中使用了一个 webview,并使用了一个 webviewclient 来感知 url 切换。据我了解,在 Android 上,我必须处理我的 webviewclient 中的所有重定向(Facebook 重定向,当用户设置他/她的电子邮件和密码时会发生几次重定向)。但我所需要的只是解析我的输出 xml 并根据输出结果做出决定(重定向到我的家庭 Activity 或失败等)。这是我的代码,如果有更合适的方法,请提出您的建议。

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);
        }
    }
}

最佳答案

我会获取 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() {}
    });

可以看到这个here: http://developers.facebook.com/docs/guides/mobile/#android

关于Android Webview Facebook 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768290/

有关Android Webview Facebook 登录的更多相关文章

  1. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

  2. ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录 - 2

    我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica

  3. ruby - 如何使用 omniauth/oauth 对每秒登录数进行基准测试? ( ruby +rspec) - 2

    我想用一个(自己的)omniauth提供商来衡量每秒可以登录多少次。我需要了解此omniauth/oauth请求的性能如何,以及此身份验证是否具有可扩展性?到目前为止我得到了什么:defperformance_auth(user_count=10)bm=Benchmark.realtimedouser_count.timesdo|n|forkdoclick_on'Logout'omniauth_config_mock(:provider=>"foo",:uid=>n,:email=>"foo#{n}@example.net")visit"/account/auth/foo/"enden

  4. ruby - 如何使用 Ruby 和 eventmachine 登录? - 2

    我正在使用Ruby和Eventmachine库编写一个应用程序。我真的很喜欢非阻塞I/O和事件驱动系统的想法,我遇到的问题是日志记录。我正在使用Ruby的标准记录器库。并不是说日志记录需要永远,但它似乎不应该阻塞,但它确实阻塞了。是否有某个库将Ruby的标准记录器实现扩展为非阻塞的,或者我应该只调用EM::defer进行日志记录调用?有没有办法让eventmachine已经为我做这件事? 最佳答案 我最终将记录器包装在一个启动线程并具有FIFO队列的单例类中。日志记录会将日志信息转储到队列中,线程只是循环,从队列中拉出内容并使用真正

  5. ruby-on-rails - 尝试登录和使用 heroku 时无法识别 ruby​​.exe - 2

    当尝试创建一个heroku应用程序并通过git推送到它时,我收到以下错误:$herokucreate'"C:\ProgramFiles\ruby-1.9.2\bin\ruby.exe"isnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.但是,$ruby-vruby1.9.3p125[i386-mingw32]我已经检查了PATH环境,它肯定包含“C:\ProgramFiles(x86)\ruby-1.9.2\bin”。同样有趣的是,当导航到该目录时,它实际上并不包含名为ruby​​.exe的文件

  6. ruby-on-rails - 使用 Ruby on Rails 设计 - 强制用户在首次登录时更改密码 - 2

    我有一个运行Devise的RoR应用程序(Rails4.2、Ruby2.2.0)。我已对其进行设置,以便管理员用户(标识我添加到用户模型的“is_admin”bool值)能够创建新的用户帐户,为他们提供生成的密码和确认电子邮件。这一切都正常工作。我还添加了datetime列pass_changed,当用户更改密码时应该更新它,然后检查created_at以确保自帐户创建以来密码已更改。如果两个日期相同,则用户将被重定向到密码更改表单。我编写了一个程序来检查用户是否更改了密码并将其放在我的application_controller.rb中:defcheck_changed_pass@u

  7. ruby-on-rails - 如何使 ActiveRecord::Schema.define 不登录到标准输出? - 2

    我在文档中看不到这个,但我认为这是一个已解决的问题。我在Rails之外使用ActiveRecord,我的脚本加载了从另一个应用程序转储的schema.rb。我想加载此模式而不将迁移输出转储到标准输出,但替换ActiveRecord::Base.logger不会关闭它。我应该覆盖什么来阻止噪音? 最佳答案 技巧显然在ActiveRecord::Migration中:ActiveRecord::Migration.verbose=false这使得迁移不会将信息输出到$stdout。有一个名为.suppress_messages的便捷包装

  8. Win10 / 11新电脑最简单跳过联网激活和使用本地账户登录方法 - 2

    跳过联网激活:OOBE界面直接按Ctrl+Shift+F3进入审核模式。这样就可以直接进入系统进行一些硬件测试等,而不用联网激活导致新机无法退货。需要注意的是,在审核模式下进行的一些操作都会保留,并不会在退出后自动还原!安装的软件在正常开机进系统后还会看见!如果电脑确实没连互联网又不想强行跳过OOBE(网上很多教程会叫你直接结束OOBE进程,但这是不推荐的,因为一些厂商自带优化程序和系统初始化设置在后面都会应用,对于笔记本跳过的话你会发现驱动和内置应用都没有装上。其实这部分脚本就在系统盘的Recovery隐藏文件夹下),可以参考以下方式:https://www.landiannews.com/

  9. Centos7-yum安装mysql-修改密码-无密码登录-安全配置 - 2

    目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.

  10. ruby-on-rails - "Given that I' m登录的 cucumber 步骤定义" - 2

    我有一个cucumber步骤:鉴于我已登录我不明白我应该如何将它作为一个步骤定义来实现。谁能指出我正确的方向、教程、博客等。 最佳答案 这是我的做法。Given/^Ihaveone\s+user"([^\"]*)"withemail"([^\"]*)"andpassword"([^\"]*)"$/do|username,email,password|@user=User.new(:email=>email,:username=>username,:password=>password,:password_confirmation=>

随机推荐