2015-02-11 31 views
0

嗨,我試圖找出如何在迅速改寫這個:Objective-C的斯威夫特:Facebook的iOS的API requestUserInfo方法

- (IBAction)requestUserInfo:(id)sender 
{ 
    // We will request the user's public picture and the user's birthday 
    // These are the permissions we need: 
    NSArray *permissionsNeeded = @[@"public_profile", @"user_birthday", @"email"]; 

    // Request the permissions the user currently has 
    [FBRequestConnection startWithGraphPath:@"/me/permissions" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
     if (!error){ 
     // Parse the list of existing permissions and extract them for easier use 
     NSMutableArray *currentPermissions = [[NSMutableArray alloc] init]; 
     NSLog(@"The fucking class is: %@", [result class]); 
     NSArray *returnedPermissions = (NSArray *)[result data]; 
     for (NSDictionary *perm in returnedPermissions) { 
      if ([[perm objectForKey:@"status"] isEqualToString:@"granted"]) { 
      [currentPermissions addObject:[perm objectForKey:@"permission"]]; 
      } 
     } // cut cut here 

} 

編輯:

我遇到了麻煩試圖獲得所需數據從FBGraphObject中提取出來,但在進一步檢查後發現。我已經發布了下面的swift版本,以便人們可以剪切並粘貼它並繼續使用swift。希望它可以節省一些時間。

回答

1

這裏:

@IBAction func requestUserInfo(sender: AnyObject){ 
    // These are the permissions we need: 
    var permissionsNeeded = ["public_profile", "user_birthday", "email"] 

    // Request the permissions the user currently has 
    FBRequestConnection.startWithGraphPath("/me/permissions", completionHandler: {(connection, result, error) -> Void in 

     if error == nil{ 
      // Parse the list of existing permissions and extract them for easier use 

      var theResult = result as? [String:[AnyObject]] 
      var currentPermissions = [String]() 
      let returnedPermissions = theResult?["data"] as [[String:String]] 

      for perm in returnedPermissions { 
       if perm["status"] == "granted" { 
        currentPermissions.append(perm["permission"]!) 
       } 
      } 

      // Build the list of requested permissions by starting with the permissions 
      // needed and then removing any current permissions 
      println("Needed: \(permissionsNeeded)") 
      println("Current: \(currentPermissions)") 

      var requestPermissions = NSMutableArray(array: permissionsNeeded, copyItems: true) 
      requestPermissions.removeObjectsInArray(currentPermissions) 

      println("Asking: \(requestPermissions)") 

      // TODO PUT A POPUP HERE TO TELL WHAT PERMISSIONS WE NEED! 

      // If we have permissions to request 
      if requestPermissions.count > 0 { 
       // Ask for the missing permissions 
       FBSession.activeSession().requestNewReadPermissions(requestPermissions, completionHandler: {(session, error) -> Void in 
        if (error == nil) { 
         // Permission granted, we can request the user information 
         self.makeRequestForUserData() 
        } else { 
         // An error occurred, we need to handle the error 
         // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/ 
         println("error: \(error?.description)") 
        } 
       }) 
      } else { 
       // Permissions are present 
       // We can request the user information 
       self.makeRequestForUserData() 
      } 

     } else { 
      // An error occurred, we need to handle the error 
      // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/ 
      println("error: \(error?.description)") 
     } 
    }) 
} 

private func makeRequestForUserData() { 
    FBRequestConnection.startForMeWithCompletionHandler({(connection, result, error) -> Void in 
     if (error == nil) { 
      // Success! Include your code to handle the results here 
      println("user info: \(result)") 
     } else { 
      // An error occurred, we need to handle the error 
      // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/ 
      println("error: \(error?.description)") 
     } 
    }) 
} 


// Show an alert message 
func showMessage(text : NSString, title : NSString){ 
    var alert = UIAlertController(title: title, message: text, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
    UIApplication.sharedApplication().delegate?.window!?.rootViewController?.presentViewController(alert, animated: true, completion: nil) 
} 
+0

「的有源訪問令牌必須用於查詢有關當前用戶的信息 – pkc456 2015-07-10 09:57:29