2016-04-25 119 views
0

我一直在尝试创建一个Tinder克隆应用程序。现在我必须登录到我的Facebook帐户,抓住我的个人资料,并显示我的显示图片。Swift和iOS9中的Facebook登录问题

我导入了最新的FBSDK,确认我的plist(Plist screenshot)正确,并使用graphRequest函数来拉我的个人资料图片,但我不断收到以下错误。

-canOpenURL: failed for URL: "fbauth2:/" - error: "(null)"

我已经打扫我的身材,重新启动我的模拟器,重新启动我的机器,完全注释掉我解析的代码。

我已经取消了所有的解析代码(我通过Heroku部署),以免简化代码。

我已经谷歌搜索了这个问题,并搜索堆栈溢出和github超过2周,还没有找到解决方案。

我看了一下这个问题是怎么红鲱鱼因与iOS 9

我想知道我做错了Facebook的SDK集成的意见。我是编码新手,需要一些帮助。我现在想要实现的就是登录到我的Facebook帐户(我可以这样做),授权我的应用程序(我也可以这样做)并在UiImageView中查看我的个人资料图片(我不能这么做)。这样我就可以随着我的课程继续构建应用程序。

/** 
* Copyright (c) 2015-present, Parse, LLC. 
* All rights reserved. 
* 
* This source code is licensed under the BSD-style license found in the 
* LICENSE file in the root directory of this source tree. An additional grant 
* of patent rights can be found in the PATENTS file in the same directory. 
*/ 

//current project 02-04-16 

import UIKit 
import Parse 
import Bolts 
import FBSDKCoreKit 
import FBSDKLoginKit 
import ParseFacebookUtilsV4 


// If you want to use any of the UI components, uncomment this line 
// import ParseUI 

// deleted parseFacebookUtils and added ParseFacebookUtilsV4 so that PFFacebookUtils.intializeFacebookWithLaunchOptions would work. Replace parseFacebookUtils if needed to go back to old code (19-04-16). 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    //-------------------------------------- 
    // MARK: - UIApplicationDelegate 
    //-------------------------------------- 



    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Enable storing and querying data from Local Datastore. 
     // Remove this line if you don't want to use Local Datastore features or want to use cachePolicy. 

//  Parse.enableLocalDatastore() 
//   
//  let parseConfiguration = ParseClientConfiguration(block: { (ParseMutableClientConfiguration) -> Void in 
//    
//   ParseMutableClientConfiguration.applicationId = "tinder9121hughglass1234" 
//   ParseMutableClientConfiguration.clientKey = "sam123456hibabina" 
//   ParseMutableClientConfiguration.server = "https://tinder-sam2.herokuapp.com//parse" 


      PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions) 



//   Uncomment these lines if you want to enable Parse 
//   PFUser.enableAutomaticUser() 
//    
// 
//   PFUser.logOut() 

//   let defaultACL = PFACL(); 


      //this is the current project 23-03-16 


//   PFUser.enableAutomaticUser() 
//   Parse.setApplicationId("tinder9121hughglass1234", clientKey: "sam123456hibabina") 



      //this code has been // temporarily 05-04-16 *** 

//    
//   let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
//   fbLoginManager.logInWithReadPermissions(["public_profile"], handler: { (result, error) in 
//    
//     
//   }) 
//    
//   PFUser.enableAutomaticUser() 
//    
//    

//  }) 

//   edited again here! 
//  let PFObject = PFUser.currentUser() 
// 
//  PFUser.enableAutomaticUser() 
// 
//  let acl = PFACL() 
//  acl.publicReadAccess = true 
//  acl.publicWriteAccess = true 
//  PFObject?.ACL = acl 

//  let defaultACL = PFACL(); 

     // If you would like all objects to be private by default, remove this line. 
//  defaultACL.publicReadAccess = true 

//  PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser: true) 

     if application.applicationState != UIApplicationState.Background { 
      // Track an app open here if we launch with a push, unless 
      // "content_available" was used to trigger a background push (introduced in iOS 7). 
      // In that case, we skip tracking here to avoid double counting the app-open. 

      let preBackgroundPush = !application.respondsToSelector("backgroundRefreshStatus") 
      let oldPushHandlerOnly = !self.respondsToSelector("application:didReceiveRemoteNotification:fetchCompletionHandler:") 
      var noPushPayload = false; 
      if let options = launchOptions { 
       noPushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil; 
      } 
      if (preBackgroundPush || oldPushHandlerOnly || noPushPayload) { 
       PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions) 
      } 
     } 

     // 
     // Swift 1.2 
     // 
     //  if application.respondsToSelector("registerUserNotificationSettings:") { 
     //   let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound 
     //   let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil) 
     //   application.registerUserNotificationSettings(settings) 
     //   application.registerForRemoteNotifications() 
     //  } else { 
     //   let types = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Alert | UIRemoteNotificationType.Sound 
     //   application.registerForRemoteNotificationTypes(types) 
     //  } 

     // 
     // Swift 2.0 
     // 
     //  if #available(iOS 8.0, *) { 
     //   let types: UIUserNotificationType = [.Alert, .Badge, .Sound] 
     //   let settings = UIUserNotificationSettings(forTypes: types, categories: nil) 
     //   application.registerUserNotificationSettings(settings) 
     //   application.registerForRemoteNotifications() 
     //  } else { 
     //   let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound] 
     //   application.registerForRemoteNotificationTypes(types) 
     //  } 

     return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 

    } 

    //-------------------------------------- 
    // MARK: Push Notifications 
    //-------------------------------------- 

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
     let installation = PFInstallation.currentInstallation() 
     installation.setDeviceTokenFromData(deviceToken) 
     installation.saveInBackground() 

     PFPush.subscribeToChannelInBackground("") { (succeeded: Bool, error: NSError?) in 
      if succeeded { 
       print("ParseStarterProject successfully subscribed to push notifications on the broadcast channel.\n"); 
      } else { 
       print("ParseStarterProject failed to subscribe to push notifications on the broadcast channel with error = %@.\n", error) 
      } 
     } 
    } 

    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
     if error.code == 3010 { 
      print("Push notifications are not supported in the iOS Simulator.\n") 
     } else { 
      print("application:didFailToRegisterForRemoteNotificationsWithError: %@\n", error) 
     } 
    } 

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
     PFPush.handlePush(userInfo) 
     if application.applicationState == UIApplicationState.Inactive { 
      PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo) 
     } 
    } 
    /////////////////////////////////////////////////////////// 
    // Uncomment this method if you want to use Push Notifications with Background App Refresh 
    /////////////////////////////////////////////////////////// 
    // func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    //  if application.applicationState == UIApplicationState.Inactive { 
    //   PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo) 
    //  } 
    // } 

    //-------------------------------------- 
    // MARK: Facebook SDK Integration 
    //-------------------------------------- 

    /////////////////////////////////////////////////////////// 
    // Uncomment this method if you are using Facebook 
    /////////////////////////////////////////////////////////// 
    // func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
    //  return FBAppCall.handleOpenURL(url, sourceApplication:sourceApplication, session:PFFacebookUtils.session()) 
    // } 

    func applicationDidBecomeActive(application: UIApplication) { 

     FBSDKAppEvents.activateApp() 
    } 
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, 
     annotation: AnyObject) -> Bool { 

     return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 

    } 
} 

回答

0

尝试加入这一行到您的Info.plist<string>fbauth2</string>

Info.plist

+0

三江源奏效停止错误消息。现在让应用程序显示我的个人资料图片。谢谢! – user2873543