Haven在Swift中找不到任何相关内容,所以我在问! 如何通过Twitter获取Parse登录用户的个人资料图片?
用户已通过解析内部登录/ / signupController
登录var username = PFUser.currentUser()?.username
图像应存储在UIImage变量
中答案 0 :(得分:4)
AHere是Swift版本。我不得不从PFTwitter将用户名从Parse更改为screenName,并添加了一行以获得图片的最高分辨率版本。请注意,我在登录后使用此功能填充注册屏幕,这将测试连接到Twitter帐户的应用帐户。即使在创建帐户后添加了链接,这种方式也很有用。
if PFTwitterUtils.isLinkedWithUser(PFUser.currentUser()!) {
let screenName = PFTwitterUtils.twitter()?.screenName!
let requestString = ("https://api.twitter.com/1.1/users/show.json?screen_name=" + screenName!)
let verify: NSURL = NSURL(string: requestString)!
let request: NSMutableURLRequest = NSMutableURLRequest(URL: verify)
PFTwitterUtils.twitter()?.signRequest(request)
var response: NSURLResponse?
var error: NSError?
let data: NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)!
if error == nil {
let result = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error)
let names: String! = result?.objectForKey("name") as! String
let separatedNames: [String] = names.componentsSeparatedByString(" ")
self.firstName = separatedNames.first!
self.lastName = separatedNames.last!
let urlString = result?.objectForKey("profile_image_url_https") as! String
let hiResUrlString = urlString.stringByReplacingOccurrencesOfString("_normal", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
let twitterPhotoUrl = NSURL(string: hiResUrlString)
let imageData = NSData(contentsOfURL: twitterPhotoUrl!)
let twitterImage: UIImage! = UIImage(data:imageData!)
}
你可能想添加这样的东西来准备一个PFFile来保存给你的新用户!
let cgImage = twitterImage.CGImage
let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
let bytesPerRow = CGImageGetBytesPerRow(cgImage)
let colorSpace = CGImageGetColorSpace(cgImage)
let bitmapInfo = CGImageGetBitmapInfo(cgImage)
let context = CGBitmapContextCreate(nil, 300, 300, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo)
CGContextSetInterpolationQuality(context, kCGInterpolationHigh)
CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(300), height: CGFloat(300))), cgImage)
let scaledImage = UIImage(CGImage: CGBitmapContextCreateImage(context))
let imageUIImage = UIImageJPEGRepresentation(scaledImage, 0.6)
let imageFile: PFFile = PFFile(name: (PFUser.currentUser().objectId! + "profileImage.jpg"), data:imageUIImage)
答案 1 :(得分:2)
André,要获取来自Twitter的解析用户的个人资料图片,您需要向http://api.twitter.com/1/users/show.json发送Twitter API请求,如此处所述=> https://dev.twitter.com/rest/reference/get/users/show。
理想情况下,您可以使用PFTwitterUtils类对此请求进行身份验证。
这就是我在我的应用程序中所做的:(在Objective C中),希望它能帮到你。
- (void)loginWithTwitter {
[PFTwitterUtils logInWithBlock:^(PFUser *user, NSError *error) {
if (!user) {
NSLog(@"Uh oh. The user cancelled the Twitter login.");
[[NSNotificationCenter defaultCenter] postNotificationName:notificationUserLoginFailed
object:error];
return;
} else {
// Fetch Twitter details
NSString * requestString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/users/show.json?screen_name=%@", user.username];
NSURL *verify = [NSURL URLWithString:requestString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:verify];
[[PFTwitterUtils twitter] signRequest:request];
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if ( error == nil){
NSDictionary* result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
_NSLog(@"%@",result);
[user setObject:[result objectForKey:@"profile_image_url_https"]
forKey:@"picture"];
// does this thign help?
[user setUsername:[result objectForKey:@"screen_name"]];
NSString * names = [result objectForKey:@"name"];
NSMutableArray * array = [NSMutableArray arrayWithArray:[names componentsSeparatedByString:@" "]];
if ( array.count > 1){
[user setObject:[array lastObject]
forKey:@"last_name"];
[array removeLastObject];
[user setObject:[array componentsJoinedByString:@" " ]
forKey:@"first_name"];
}
[user saveInBackground];
}
[[NSNotificationCenter defaultCenter] postNotificationName:notificationUserDidLogin
object:nil];
return;
}
}];
}