iOS :How to get Facebook Album Photo's Picker

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

Facebook iOS SDK 是否像 UIImagePickerController 那样提供任何默认的 (Facebook) 相册照片选择器?

我听说过这个所以搜索了很长时间但找不到任何东西。

如果有人对此有任何想法,请告诉我。如果不是,那么我肯定需要自己制作。

最佳答案

从 Facebook 导入

无需第三方工具即可从 Working For graph api 2.4、2.5、2.6、2.7、2.8 和 Facebook graph api 2.10 相册中获取 facebook 照片

1) 在Facebook开发者账户中添加应用

2) 然后在应用程序中选择平台以便更好地理解,请参见以下屏幕截图

enter image description here

3) 选择 ios 并按照向导中的所有步骤显示

4) 然后去graph api explore https://developers.facebook.com/tools/explorer/145634995501895/

5) 在 graph api explorer 中选择您的应用程序以获得更多了解显示屏幕截图

enter image description here

6) 点击 Get token ..然后在 get token 中点击 get access token 你可以看到这么多权限以便更好地理解看图片

enter image description here

7) 用于检查您的权限以获取相册名称和图像在屏幕截图后显示

enter image description here

如果 user_photos 权限未打开,则显示错误,请参见以下屏幕截图 enter image description here

完成第 7 步后,请执行以下步骤或仅下载编码文件。我已经把链接放在那里你可以下载

objective-c 的编码文件

https://www.dropbox.com/s/1ysek035ek88xuw/FacebookAlbum%20Demo.zip?dl=0

8) 如果没有错误显示,则在 View Controller 的 viewDidLoad 方法中执行以下代码。此代码用于获取相册名称和相册 ID。

Objective-C

     FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];

    [loginManager logInWithReadPermissions:@[@"public_profile", @"email", @"user_friends",@"user_photos"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)

    {

        [[[FBSDKGraphRequest alloc]
          initWithGraphPath:@"me/albums"
          parameters: nil
          HTTPMethod:@"GET"]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error) {

               //  NSLog("%@",result);

                 NSArray *data = [result valueForKey:@"data"];


                 name = [data valueForKey:@"name"];

                 ids = [data valueForKey:@"id"];


                 [self.Fbtableview reloadData];


             }


         }];

9) 现在在 tableview cell for row

中输入代码后获取相册封面照片

Objective-C

 coverid = [NSString stringWithFormat:@"/%@?fields=picture",[ids objectAtIndex:indexPath.row]]; **// pass album ids one by one**


/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                              initWithGraphPath:coverid
                              parameters:nil
                              HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error)
 {

    // NSLog("%@",result);

     NSDictionary *pictureData  = [result valueForKey:@"picture"];

     NSDictionary *redata = [pictureData valueForKey:@"data"];

     urlCover = [redata valueForKey:@"url"];



     NSURL *strUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@",urlCover]];

     NSData *data = [NSData dataWithContentsOfURL:strUrl];
     UIImage *img = [[UIImage alloc] initWithData:data];
     UIImageView *img1;

     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
     {
         img1= [[UIImageView alloc]initWithFrame:CGRectMake(10, 0, 50, 50)];
     }
     else
     {
         img1= [[UIImageView alloc]initWithFrame:CGRectMake(10, 0, 40, 40)];
     }



     [img1 setImage:img];
     [img1 setContentMode:UIViewContentModeScaleAspectFit];
     [cell.contentView addSubview:img1];


 }];

10) 现在是获取相册照片 ID 的代码。

 // code in **table didselect method**

Objective-C

   NSString *strAlbumid = [NSString stringWithFormat:@"/%@/photos",[ids objectAtIndex:indexPath.row]];



FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                              initWithGraphPath:strAlbumid
                              parameters:nil
                              HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error) {

    // NSLog("%@",result);
    NSDictionary *data = [result valueForKey:@"data"];

    arrId = [data valueForKey:@"id"];



    PhotoViewControllerr *photoViewcontroller;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        photoViewcontroller = [[PhotoViewControllerr alloc]initWithNibName:@"PhotoViewController_Ipad" bundle:nil];
    }
    else
    {
        photoViewcontroller = [[PhotoViewControllerr alloc]initWithNibName:@"PhotoViewController" bundle:nil];
    }


    photoViewcontroller.picsArray = arrId;

    [photoViewcontroller.navigationController setNavigationBarHidden:YES];




    [[self navigationController] pushViewController:  photoViewcontroller animated:YES];


}];

11) 另一个 View Controller 现在代码用于在 collection view cellforRow

中获取图像

Objective-C

NSString *strAlbumid = [NSString stringWithFormat:@"/%@/?fields=images",[self.picsArray objectAtIndex:indexPath.row]];



FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                              initWithGraphPath:strAlbumid
                              parameters:nil
                              HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error)
{

    //NSLog("%@",result);
    picture_images = [result valueForKey:@"images"];

    NSMutableArray *picCount = [picture_images objectAtIndex:picture_images.count - 1];



     NSURL *strUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[picCount valueForKey:@"source"]]];


    dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(q, ^{
        /* Fetch the image from the server... */
       NSData *data = [NSData dataWithContentsOfURL:strUrl];
         UIImage *img = [[UIImage alloc] initWithData:data];
         dispatch_async(dispatch_get_main_queue(), ^{

         if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
         {

         img1= [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
         }
         else
         {

         img1= [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
         }



         img1.image = img;
         img1.contentMode = UIViewContentModeScaleAspectFit;
         [cell.contentView addSubview:img1];

         });
         });



}];

12) 获取数据后,您必须在 facebook 中提交您的应用程序,以便提交您可以填写信息

1)应用详情

2)现状与回顾

=====

如果您有任何疑问,我会帮助您

享受快乐的编码。

关于iOS :How to get Facebook Album Photo's Picker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207465/

相关文章:

ios - 在 iOS XMPP 聊天应用程序中读取收据

ios - 如何在 Swift 中进行弱链接?

ios - Xcode/Swift 'filename used twice' 构建错误

iOS core data 按日期、月份年份汇总数据

ios - 带有两种不同颜色文本的 UILabel

ios - 通过 iOS App 发送 Facebook 好友请求

objective-c - iOS 单元测试 : Can't link to symbols in my Application target. 怎么了?

ios - 带有卡片卡片和列表的 UITableView - iOS Swift

ios - 钛加速器 : Links/Images in Labels/TextArea - Open in WebView

ios - 如何在 UITableViewCell UILabel 中使用不同的字体名称