在Swift中沒有發現任何關於此事的信息,所以我問了! 如何從Twitter中獲得用Parse登錄的用戶的個人資料圖像?在Swift中使用Parse獲取Twitter個人資料圖片
經由解析內部登錄 - 是已經登錄的用戶/ signupController
var username = PFUser.currentUser()?.username
而圖像應被存儲在的UIImage可變
在Swift中沒有發現任何關於此事的信息,所以我問了! 如何從Twitter中獲得用Parse登錄的用戶的個人資料圖像?在Swift中使用Parse獲取Twitter個人資料圖片
經由解析內部登錄 - 是已經登錄的用戶/ signupController
var username = PFUser.currentUser()?.username
而圖像應被存儲在的UIImage可變
AHere是斯威夫特的版本。我不得不將用戶名從Parse更改爲PFTwitter的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)
安德烈,得到一個登錄的用戶的簡檔的圖像與從twitter中解析出來,您需要將這個Twitter API請求發送到http://api.twitter.com/1/users/show.json,如此處所示=>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;
}
}];
}
非常感謝! –
你能對你的問題更精確一點嗎?你如何知道分析用戶擁有哪個twitter賬戶?有沒有在你的數據庫鏈接到Twitter帳戶? – Christian
好吧更新吧! –