Titanium - Facebook模块不使用本机登录

时间:2013-11-16 18:46:04

标签: android titanium titanium-mobile facebook-login titanium-alloy

我正在尝试将facebook登录到我正在尝试使用Titanium开发的应用程序, 当我点击“连接”按钮时,它会显示一个如下所示的对话框: Login

它看起来像一个网络应用程序的Facebook登录,而不是本机应该是什么样子。我希望它是这样的: Another login

那么,如何让这个模块使用本机登录对话框而不是这个网页风格对话框?

1 个答案:

答案 0 :(得分:7)

要使用iOS原生facebook登录,您必须:

  1. 使用新的facebook模块require('facebook'),旧的模块已弃用
  2. 设置forceDialogAuth = false;
  3. 确保您的应用的套装ID也在您的Facebook应用中设置
  4. 在tiapp.xml中设置facebook app id
  5. 将Info.plist移动​​到您应用的根文件夹,并在那里提供facebook id和url方案(使用新的SDK,您可以在tiapp.xml中执行此操作,我将在一分钟内给出一些示例)
  6. 您发布的图片是后备解决方案,如果

    将会发生
    • 用户尚未激活设备上的facebook login / facebok应用
    • 用户拥有本机facebook登录之前的iOS版本
    • 您在模拟器中运行您的应用


    这就是我如何使用原生iOS登录,一步一步:

    1。创建一个Facebook应用程序
    要使用原生iOS facebook登录,您必须在developers.facebook.com创建一个Facebook应用程序。将您的应用ID复制到文本编辑器,稍后我们将需要它。 Your facebook app id

    2。设置您的Facebook应用
    启用“原生iOS应用”'基础知识部分的整合。

    (1)输入您为应用程序使用的软件包ID,与您在tiapp.xml中设置的相同 (2)如果您希望Facebook从书签等启动您的应用程序,请激活Facebook登录。
    (3)可选:用于在多个应用中共享您的Facebook ID。我们也将在Info.plist中使用此url方案。 Facebook app settings

    第3。设置tiapp.xml
    转到Titanium Studio并打开tiapp.xml(通常是apps目录中的最后一个文件)。左下角有两个标签。我们首先需要概述。确保您的应用ID 与您在Facebook应用中输入的应用ID 相匹配。单击模块的+并添加Appcelerators自己的facebook模块,默认安装。它应该出现在下面的列表中。 enter image description here
    仍然在tiapp.xml中,单击 tiapp.xml 选项卡,然后添加以下内容:
    <property name="ti.facebook.appid">XXXXXXXX</property>
    使用X作为您的Facebook应用程序ID ,显然。

    4。复制并编辑Info.plist文件
    在Finder中,导航到您的应用程序根文件夹。从这里开始构建&gt;苹果手机。你应该在这里看到Info.plist。复制并粘贴到应用程序的根文件夹中。
    使用您选择的文本编辑器打开它。将 FacebookAppID FacebookDisplayName 添加到文件中,并将占位符值替换为您自己的值。这可能没有必要,但是我使用它并且它起作用,只是为了安全起见;)寻找 CFBundleURLTypes 并使用 test 对其进行编辑,如下所示作为您的应用程序的URL方案,您之前已将其设置在您的Facebook应用程序中。这样,您也可以通过输入test://从Safari打开您的应用。请注意CFBundleURLSchemes数组中的 fb ,这必须为您的facebook app id添加前缀,与之前的所有其他字段不同。

    <key>FacebookAppID</key>
    <string>XXXXXXXXXXXXX</string>
    <key>FacebookDisplayName</key>
    <string>Your facebook app name</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>test</string>
            <key>CFBundleURLSchemes</key>
            <array>
                  <string>test</string>
                  <string>fbXXXXXXXXXX</string>
            </array>
        </dict>
    </array>
    

    请注意:使用最新的SDK,这些设置也可以在tiapp.xml中设置,但由于我还没有完成,所以此示例使用Info.plist


    5。使用facebook模块
    我不经常使用标准的facebook按钮,因为它无法定制。假设您有一个名为 loginButton 的登录按钮和一个名为 logoutButton 的logoutButton,我们将它们连接到我们的facebook模块:

    // The module we have added to our project via tiapp.xml before
    var facebookModule = require('facebook');
    // We can read the facebook app id from tiapp.xml
    var FACEBOOK_APP_ID = Ti.App.Properties.getString('ti.facebook.appid');
    // Set the app id
    facebookModule.appid = FACEBOOK_APP_ID;
    // Do not force a facebook html popover but use the native dialog if possible
    facebookModule.forceDialogAuth = false;
    // Add an event listener to the facebook login event
    facebookModule.addEventListener('login', facebookLoginHandler);
    // Also add an event listener to the logout event
    facebookModule.addEventListener('logout', facebookLogoutHandler);
    
    // The event listener of our login button
    loginButton.addEventListener('click', function() {
        facebookModule.authorize();
    });
    
    // The event listener of our logout button
    logoutButton.addEventListener('click', function() {
        facebookModule.logout();
    });
    
    // The facebook login event handler
    function facebookLoginHandler(e) {
        if (e.success) {
            // Success!
        } else if (e.error) {
            // Error!
        } else if (e.cancelled) {
            // cancelled by user
        }
    }
    
    // The facebook logout handler
    function facebookLogoutHandler(e) {
        if (e.success) {
            // Success, clear the facebook browser cookies so someone else
            // can login later, if the browser fallback is used
            var client = Titanium.Network.createHTTPClient();
            client.clearCookies('https://login.facebook.com');
        } else if (e.error) {
            // Error!
        } 
    }