在 UIwebView 应用中使用 Facebook 登录

Posted

技术标签:

【中文标题】在 UIwebView 应用中使用 Facebook 登录【英文标题】:Login using Facebook in UIwebView app 【发布时间】:2015-12-17 05:14:32 【问题描述】:

在我的 Rails 应用程序中,用户使用 Facebook 登录。它运行良好。 现在我计划为我的 rails 应用程序开发一个 ios 应用程序 (UIWebView app)。即在 WebView 中加载我的网站。

我关心的是我应该只有one view controller 加载网站还是two view controllers,第一个使用iOS FB SDK 和其他控制器加载网站的本地FB 登录?

目前我已尝试使用一个控制器,当我在 iOS 应用程序中单击 Login using Facebook(位于网站中)时,会在 safari 中打开 Facebook 登录,输入凭据后会无限期出现空白页面。

【问题讨论】:

我认为你需要使用 UIApplication 类和 NSNotification 中心。并在您的 Webviewcontroller 中实现 webview 的委托方法,您可以在其中比较加载 URL。 不要尝试在 safari 中打开 url 并登录,而不是在您的应用程序内打开 webview,否则 Apple 将拒绝您的应用程序。 对于新开发,请考虑使用WKWebView 而不是UIWebView @BandishDave:我该怎么做?每次我点击登录时,它都会在 safari 中打开。 @HalMueller: WKWebView 在 Xcode 6.3 版中可用? 【参考方案1】:

您好,您可以使用一个视图控制器。对于使用 Facebook 登录,您可以参考本教程。integrate login with facbook

重要步骤

第 1 步:在开发者应用上创建 Facebook 应用并配置您的 info.plist 文件

第 2 步:登录操作代码

- (IBAction)signInWithFacebookClicked:(id)sender 


    [FBSession openActiveSessionWithReadPermissions:@[@"public_profile",@"email",@"user_friends"]
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session, FBSessionState state, NSError *error) 


         // The session is open. Get the user information and update the UI.
         [FBRequestConnection startWithGraphpath:@"me"
                                      parameters:@@"fields": @"first_name,last_name, email"
                                      HTTPMethod:@"GET"
                               completionHandler:^(FBRequestConnection *connection, id result, NSError *error) 
                                   if (!error) 
                                       // Set the use full name.

                                       NSLog(@"FBresponse: =>%@",result);
                                   
                                   else
                                       NSLog(@"%@", [error localizedDescription]);
                                   
                               ];
     ];

第 3 步:处理回调

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation



    return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];





- (void)applicationDidBecomeActive:(UIApplication *)application



    // Handle the user leaving the app while the Facebook login dialog is being shown
    // For example: when the user presses the iOS "home" button while the login dialog is active
    [FBAppCall handleDidBecomeActive];


第 4 步:然后根据您的要求处理 FBSession 块。 希望这会有所帮助。

【讨论】:

Nagare:谢谢。会尝试。我当前的应用程序正在迅速运行。因此,您上面提到的资源是否可以快速获得?这将有助于我理解它并进行相应的修改。【参考方案2】:

问题是 iOS 不允许独立的 UIWebView 应用。所以解决方法是:

Have two ViewController, 
    First ViewController would be used for native FB login.
    Second ViewController would load the webapp. 

这就是我设计 iOS UIWebview 应用程序的方式,拥有两个 ViewController。

【讨论】:

以上是关于在 UIwebView 应用中使用 Facebook 登录的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIWebView 在 iOS 应用程序中登录 Instagram 时出错

如何在 UIWebView 中使用 Facebook 评论插件

是否可以使用 UIWebView 方法在 iphone 本机应用程序中播放 vimeo 视频?

UIWebView 正在请求位置权限

在 UIWebview 之类的 ViewController 中使用 SafariViewController

UIWebView 未打开已安装的应用程序但在 safari 中打开