我正在尝试将facebook登录到我正在尝试使用Titanium开发的应用程序, 当我点击“连接”按钮时,它会显示一个如下所示的对话框:
它看起来像一个网络应用程序的Facebook登录,而不是本机应该是什么样子。我希望它是这样的:
那么,如何让这个模块使用本机登录对话框而不是这个网页风格对话框?
答案 0 :(得分:7)
要使用iOS原生facebook登录,您必须:
require('facebook')
,旧的模块已弃用forceDialogAuth = false
; 您发布的图片是后备解决方案,如果
将会发生
这就是我如何使用原生iOS登录,一步一步:
的 1。创建一个Facebook应用程序
要使用原生iOS facebook登录,您必须在developers.facebook.com创建一个Facebook应用程序。将您的应用ID复制到文本编辑器,稍后我们将需要它。
的 2。设置您的Facebook应用
启用“原生iOS应用”'基础知识部分的整合。
(1)输入您为应用程序使用的软件包ID,与您在tiapp.xml中设置的相同
(2)如果您希望Facebook从书签等启动您的应用程序,请激活Facebook登录。
(3)可选:用于在多个应用中共享您的Facebook ID。我们也将在Info.plist中使用此url方案。
第3。设置tiapp.xml
转到Titanium Studio并打开tiapp.xml(通常是apps目录中的最后一个文件)。左下角有两个标签。我们首先需要概述。确保您的应用ID 与您在Facebook应用中输入的应用ID 相匹配。单击模块的+并添加Appcelerators自己的facebook模块,默认安装。它应该出现在下面的列表中。
仍然在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!
}
}