通过单点登录进行身份验证后移至 Facebook 应用程序页面

2023-12-05

我正在开发一个应用程序,需要集成 Facebook 的社交功能。

我想要的是使用 SSO(单点登录)功能,当用户按下我的应用程序中的按钮时,网络视图将打开并向他显示我在 Facebook 中的应用程序页面,在用户进行身份验证后,现在他可以像其他人一样执行操作作为经过身份验证的用户。

我下载了 Facebook SDK 并将其包含在我的项目中,我还在 Facebook 开发人员页面中签署了我的应用程序并获取了 APP-ID。

到目前为止,我的代码是这样的:

public class WebViewLike extends Activity {

    private static final String TAG = "WebViewLike";
    public static final String APP_ID = "1222222";
    private Facebook facebook = new Facebook(APP_ID);

    private WebView webView;
    private Activity myActivity;

    private final class WallWebChromeClient extends WebChromeClient {

        public void onProgressChanged(WebView view, int progress)   
        {
            myActivity.setTitle("Loading...");
            myActivity.setProgress(progress * 100);

            if(progress == 100)
                myActivity.setTitle(R.string.app_name);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.view_weblike);
        myActivity = this;

        facebook.authorize(this, new DialogListener() {
            @Override
            public void onComplete(Bundle values) {

                Log.d(TAG, "onComplete");
                Log.d(TAG, "facebook.getAccessToken() " + facebook.getAccessToken());
                Log.d(TAG, "facebook.getAccessExpires() " + facebook.getAccessExpires()); 

                //Load the given URL
                webView.loadUrl(getFacebookWallUrl());
            }

            @Override
            public void onFacebookError(FacebookError error) {Log.d(TAG, "onComplete");}

            @Override
            public void onError(DialogError e) {Log.d(TAG, "onComplete");}

            @Override
            public void onCancel() {Log.d(TAG, "onComplete");}
        });

        initWebView();
    }

    private void initWebView() {
        webView = (WebView) findViewById( R.id.likeWebView );
        final WebSettings webSettings = webView.getSettings(); 
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setBuiltInZoomControls(false);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setHorizontalScrollBarEnabled(false);
        webView.setWebChromeClient(new WallWebChromeClient());
    }

    private String getFacebookWallUrl() {

        Log.d(TAG, "facebook.getAccessToken() != null");
        String wallUrl = "http://www.facebook.com/plugins/login.php?" + "href="
                + URLEncoder.encode("http://www.facebook.com/MyAppPage") + "&access_token="
                + URLEncoder.encode(facebook.getAccessToken());

        Log.d(TAG, "wallUrl " + wallUrl);
        return wallUrl;
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "onActivityResult");
        facebook.authorizeCallback(requestCode, resultCode, data);
    }
}

现在,当我按下按钮时,我会转到一个新活动,该活动表示我已获得授权,这意味着 SSO 工作正常。问题是,当我按“确定”按钮时,正如我所说,我想移动到我的应用程序页面,但我尝试的所有内容都显示我的 Facebook 应用程序页面,但要求我再次登录。从我的角度来看,我需要改变wallUrl字符串在getFacebookWallUrl()方法,但我找不到任何相关信息。

是否可以?


您是否通过社交网络分享有关您的应用程序的信息?如果您的答案是肯定的,那么请尝试this.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过单点登录进行身份验证后移至 Facebook 应用程序页面 的相关文章

随机推荐

  • 如何从 JFrame 的中心元素显示不同的页面(已设置为 BorderLayout)

    import java awt BorderLayout import java awt Component import javax swing JFrame import javax swing border Border public
  • 使用 Wix 升级

    我尝试了页面上列出的几乎所有解决方案如何实现WiX安装程序升级 但没有升级成功 升级的时候总是提示这个信息 已安装此产品的另一个版本 无法继续安装此版本 要配置或删除此产品的现有版本 请使用控制面板上的添加 删除程序 当我跟踪安装程序日志时
  • 用于匹配 JavaScript 括号和方括号的正则表达式

    我有这个与括号内的文本匹配的正则表达式 g 我希望能够匹配圆括号和方括号 这样它就能检测到字符串中的圆括号和方括号 这样我就可以给它着色 这应该是字符串 The quick brown fox 我想上色 quick and fox 所以我需
  • 为什么我无法编译 C# 中类接口中声明的自定义事件

    假设我有这个 public interface ISlider event CustomEventDelegate CustomEvent 在我实现 ISlider 的课程中 我尝试了这个 public CustomEventDelegat
  • Angular 控制器未使用 OcLazyLoad 和 ngRoute 加载

    我有一个应用程序 最初加载了大量脚本 并且随着开发的进行 该列表不断增长 我想在需要时延迟加载包含控制器的脚本 我使用 OcLazyLoad 和 ngRoute 作为路由选项 我确实尝试了 ui route 它实际上具有相同的最终结果 但导
  • 如何在XML中使用外部实体?

    我试图了解如何使用外部实体 但我遗漏了一些东西 我有第一个文件 测试实体 xml
  • Node.js readFileSync ZIP 文件

    我正在尝试读取 ZIP 文件并将其输出到浏览器 获取页面上显示的代码并将其另存为 ZIP 文件 fs readFileSync dir file zip utf 8 当我这样做时 我得到的输出以PK coG filename txt并持续一
  • ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

    有没有办法控制 JSON 输出JsonResult具有属性 类似于您可以使用的方式XmlElementAttribute及其兄弟来控制 XML 序列化的输出 例如 给定以下类 public class Foo SomeJsonSeriali
  • MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?

    这可能吗 假设我有一个地址列表 其中有很多重复的条目 我需要过滤掉所有重复项 因为有些地址的名称略有不同 但邮政编码和电话号码相同 首先 我对邮政编码和电话进行 GROUP BY SELECT name address postalcode
  • 如何使用 AWS Cloudformer 为现有 API 网关创建云形成模板?

    我已经使用 aws 控制台创建了一个 api 网关 我想使用以下方法为我的 api 网关生成 CloudFormation 模板云形成者 请帮忙 尽管 AWS 尚未发布官方声明 但 CloudFormer 似乎已终止生命周期 AWS 没有正
  • 使用正则表达式匹配编辑(重新编码、折叠、排序)因子级别

    我发现在 R 中操作因子变量过于复杂 清洁因素时我经常想做的事情包括 排序级别 不仅设置参考类别 而且将所有级别按逻辑 非字母顺序 排列为汇总表 x lt factor x levels new order 重新编码 重命名因子级别 简化名
  • iOS 中 NSOperation 和 NSOperationQueue 的后台任务

    我想上传一些文件 即使应用程序进入后台 这些文件也应该继续 目前 我正在从数据库检索文件 然后通过 NSOperation 将其添加到队列中 然后启动上传过程 即使应用程序进入后台或前台 也应上传所有文件 下面是单个任务的代码 任何人都可以
  • 如何找到 log4j 默认初始化中使用的 URL?

    Log4j默认初始化通过一个过程来查找并使用 URL 进行配置 之后 您如何才能找出最终使用的 URL 而无需自己编写相同的过程 如果您必须自己编写代码 您可能不会得到与 log4j 完全相同的结果 而且它可能会在未来的版本中发生变化 如果
  • 如何使用 Rails 发送电子邮件

    这可能非常直接和简单 但我是 ruby on Rails 的新手和菜鸟 我有一个简单的电子邮件 php 脚本 我在旧网站上使用过 但现在由于我已经转换为 Rails 我不确定如何创建与之等效的脚本 我尝试使用rails generate m
  • 为什么 echo 与 printf 结合显示错误的输出? [复制]

    这个问题在这里已经有答案了 有谁知道为什么当我执行此操作时 usr bin php 我明白了 1005 1005 1005 1005 1005 1005 你在混合echo and printf printf返回格式化字符串的长度 所以你的e
  • django-nonrel 和管理页面

    我正在尝试在 AppEngine 上为我的网站设置 Django 管理套件 但它不起作用 我正在使用 django nonrel 设置与 我网站的其余部分似乎工作正常 但我需要让管理员工作 以便我可以开始使用数据存储区 这是我得到的错误 D
  • 格式化 Emacs 函数中的标头以将缓冲区打印到 PDF(带换行)

    Rupert Swarbrick 提出了以下三个函数来将 Emacs 缓冲区打印为 pdf 其中行被换行 使用时通常不会出现这种情况 ps print 功能 问题是这个函数要实现换行 必须复制当前缓冲区 这有效地破坏了ps print bu
  • 使用C将exec进程发送到后台?

    我的问题听起来与此相同 但事实并非如此 在Linux中用C在后台启动一个进程 我知道如何执行 fork 但不知道如何将进程发送到后台 我的程序应该像一个简单的命令 unix shell 一样工作 支持管道和后台进程 我可以做管道和叉子 但我
  • Selenium WebDriver 获取文本

    我有一个 div 0 div 我尝试编写 myDiv 的测试0其中的文字 使用 WebDriver 是 String text webDriver findElement By xpath div name myDiv getText 但在
  • 通过单点登录进行身份验证后移至 Facebook 应用程序页面

    我正在开发一个应用程序 需要集成 Facebook 的社交功能 我想要的是使用 SSO 单点登录 功能 当用户按下我的应用程序中的按钮时 网络视图将打开并向他显示我在 Facebook 中的应用程序页面 在用户进行身份验证后 现在他可以像其