Objective-C 到 Swift : Facebook iOS API requestUserInfo method

标签 objective-c facebook-graph-api swift facebook-ios-sdk

嗨,我正在尝试找出如何快速重写它:

- (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。希望它可以节省一些人的时间。

最佳答案

这里:

@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)
}

关于Objective-C 到 Swift : Facebook iOS API requestUserInfo method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453140/

相关文章:

ios - 使用 NSJSONSerialization 序列化一个 unsigned long long

ios - 如何在用户触摸屏幕后延迟代码运行

objective-c - 实现后台 worker - Obj C/Cocoa

Facebook Graph API 返回 'false',即使帖子是公开的

angularjs - angular-ui 在从 facebook oauth 重定向时替换'?' with ' #'

ios - UIButtonBarItem 没有改变

ios - 仅获取下一次 iOS 本地通知的时间

facebook - 使用 Facebook 上的应用程序发送通知

ios - Swift self.performSegueWithIdentifier 随机不起作用

ios - UISlider 调整以匹配 UITextField 值