代号一。使用 Webview 组件登录 Facebook

Posted

技术标签:

【中文标题】代号一。使用 Webview 组件登录 Facebook【英文标题】:Codename one. Log in with Facebook using Webview component 【发布时间】:2016-06-14 09:46:24 【问题描述】:

我的 cn1 应用程序结合了 Facebook 和 Google+ 的登录功能。当在 Iphone 上调用 doLogn() 时,会打开一个 Safari 页面,允许用户分别输入他们的 Facebook 或 Google 凭据。我面临的问题是我的应用程序刚刚被苹果拒绝,因为用户被带出应用程序并进入 safari 以便使用 Facebook 或 Google 登录,据苹果公司称,这提供了“糟糕的用户体验”。 Apple 建议我使用 Safari View Controller API,它允许显示 URL 并从应用程序中的嵌入式浏览器检查证书,以便客户可以验证网页 URL 和 SSL 证书,以确认他们正在将登录凭据输入到一个合法的页面。

我注意到 Codename one 有一个 WebView 组件。但是,当我调用 doLogin() 时,我不确定是否可以在 Webview 而不是 Safari 中打开 url。如果是。我如何实现这一点,Web View 是正确的组件吗?或者我是否需要使用Safari View Controller API,如果需要,我如何将这个api添加到我的cn1项目中,甚至可能吗?

我建议 codenameone 将其整合到他们的 Facebook 和 Google 登录功能中,以防止任何未来的用户被应用商店拒绝。

这似乎在原生 Iphone 应用程序上自动发生 - Safari web view opening when logging to FB through ios 9。对于 IOS,我应该尝试实现原生 Facebook 登录吗?如果是这样的话。我从哪里开始?

final Login fb = FacebookConnect.getInstance();
    fb.setClientId("XXXXXXXXXXXXXX");
    fb.setClientSecret("XXXXXXXXXXXXX");
    fb.setRedirectURI("http://www.mibrandapp.com");
    FaceBookAccess.setPermissions(new String[]"id", "name", "first_name", "last_name");
    fb.setScope("id");
    fb.setCallback(new LoginCallback() 
        @Override
        public void loginFailed(String errorMessage) 
            Dialog dg = new Dialog();
            dg.setTitle("Login failed");
            dg.show();
        

        @Override
        public void loginSuccessful() 
            ....
        
    );
    //fb.doLogin();
    fb.nativelogin();

【问题讨论】:

为什么不直接使用 Facebook SDK? @WizKid 我该如何在代号一中做到这一点? 【参考方案1】:

目前,Codename One 构建服务器使用 Facebook IOS SDK 4.4,它使用打开 Facebook 应用程序(如果已安装)和 Safari 应用程序(如果未安装)进行身份验证的默认行为。

如果您切换到“iphone_new”构建目标(即将成为标准),它将使用较新的 Facebook IOS SDK 4.12,它将(默认情况下)在您的应用程序的 Web 视图中处理身份验证。

对这种方法运行一些测试,我发现在 iOS 9 上,您需要将以下内容添加到您的 ios.plistInject 构建提示中:

<key>LSApplicationQueriesSchemes</key><array><string>fbauth2</string></array>

我刚刚提交了一个将自动包含此内容的更改,因此在下一次服务器更新后(可能在星期五),它会在没有此构建提示的情况下正常工作。

2016 年 6 月 14 日更新

我刚刚在 SVN 中对此进行了更新,以便它默认使用 IOS SDK 4.12,无需进行任何更改即可解决此问题。服务器将在周五更新 - 之后您应该能够发送您的构建(没有特殊的构建提示)并且它会工作。

【讨论】:

【参考方案2】:

在安装和激活 Facebook 应用程序时,Codename One 使用本机 Facebook 登录。您需要按照the developer guide section 中的说明使用 Facebook Connect API。

【讨论】:

我确实使用 Facebook Connect API。我在上面的代码中进行了编辑。仍然在 Safari 中打开,仍然被苹果拒绝。我什至尝试了 nativeLogin()。打电话。 当用户拥有 Facebook 应用程序时,它会改为打开应用程序。然而,苹果仍然对此不满意。他们希望这一切都在我的应用程序中的 Web 视图组件中完成。如此处所述:***.com/questions/32375916/… 是否需要下载并使用原生IOS Facebook SDK。这可以在cn1中做到吗?如果是这样,怎么做?还是我在打一场失败的战斗?我们距离发布还有两周的时间,在解决此问题之前我们无法上传应用程序。如果在cn1中不能做到这一点,那么我们还不如让代号一个人的Facebook登录能力无用,因为它不会被应用商店批准。我希望有办法解决这个问题。 CN1 已经在内部使用原生 IOS Facebook SDK 如果您使用文档中描述的适当构建提示。 @stevehannah 我已经有了构建提示 facebook.appid 以及 facebook=true。如果用户没有 Facebook 应用程序,该应用程序仍会打开 Safari 应用程序进行登录。当用户拥有 facebook 应用程序时,它将使用 facebook 应用程序登录。但是苹果拒绝了我,因为如果用户没有 Facebook 应用程序,我的应用程序会打开 safari 登录。还有其他我必须包括的构建提示吗?我尝试使用 nativeLogin 和 doLogin。我需要更新 cn1 吗?

以上是关于代号一。使用 Webview 组件登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

在不使用SalesForce Webview的情况下登录iOS的SalesForce?

如何在表单中进行 webview 和调整文本?

代号一 Android Sidemenu

HarmonyOS之常用组件WebView的使用

滚动组件ToVisible在android上的代号一中不起作用,键盘打开

2-4 原生小程序 - 自带组件及API