Вопрос

I want to share my image on the facebook using my AppID. So I can see it on facebook as via App. Its working fine till iOS 5. But not in iOS 6.

If I'm using SLComposeViewController, so I can share image but is displays 'via iOS' instead of 'via App'. So I've reviewed code for it and applied, but it's not sharing the image. Please check the code for any issues and correct it.

facebookaccount = [[ACAccountStore alloc] init];
ACAccountType *facebookaccountType = [facebookaccount accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];

// Specify App ID and permissions
NSDictionary *options = @{ ACFacebookAppIdKey: @"xxxxxxxxxxxxx", ACFacebookPermissionsKey: @[@"publish_stream"], ACFacebookAudienceKey: ACFacebookAudienceFriends };
[facebookaccount requestAccessToAccountsWithType:facebookaccountType options:options completion:^(BOOL granted, NSError *error) {
    if (granted) {
        NSArray *accountsArray = [facebookaccount accountsWithAccountType:facebookaccountType];
        facebookAccount = [[accountsArray lastObject] retain];
        NSLog(@" Account :::: %@", facebookAccount);
    } else {
        NSLog(@" Error :::: %@", error.description);
    }}];
NSDictionary *parameters = @{@"message" : @""};
NSString *link = [NSString stringWithFormat:@"%simages/%@",ServerPath,[images objectAtIndex:imageNO]];
NSURL *url = [NSURL URLWithString:link];
NSData *data = [NSData dataWithContentsOfURL:url];

CGFloat compression = 1.0f;
CGFloat maxCompression = 0.0f;
int maxFileSize = 150*224;
UIImage *img1  = [[UIImage alloc] initWithData:data];
NSData *imageData = UIImageJPEGRepresentation(img1, compression);

while ([imageData length] > maxFileSize && compression > maxCompression){
    compression -= 0.1;
    imageData = UIImageJPEGRepresentation(img1, compression);
}

UIImage *img  = [[UIImage alloc] initWithData:imageData];
NSLog(@"Image ::: %@", img);
NSData *myImageData = UIImagePNGRepresentation(img);
NSLog(@" Image Data ::: %@", myImageData);
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me"];
SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:requestURL parameters:parameters];

[facebookRequest addMultipartData:myImageData withName:@"source" type:@"multipart/form-data" filename:nil];
NSLog(@"Request Account :::: %@", facebookAccount);
facebookRequest.account = facebookAccount;
[facebookRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"Done with Facebook.......");
    if (!error) {
        NSDictionary *list = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        NSLog(@" Dictionary ::: %@", list);
    } else {
        NSLog(@" Error :::: %@", error.description);
    }}];

I'm getting null values in the dictionary log.

What can be the issue? Thank you.

Это было полезно?

Решение

use below code rather than SLComposeViewController use SLRequest

NSDictionary *parameters = @{@"message": sendmessage};

SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                        requestMethod:SLRequestMethodPOST
                                                  URL:[NSURL    URLWithString:@"https://graph.facebook.com/me/photos"]
                                                       parameters:parameters];

[facebookRequest addMultipartData: myImageData
                                 withName:@"source"
                                     type:@"multipart/form-data"
                                 filename:@"TestImage"];

facebookRequest.account = facebookAccount;

[facebookRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
 // Log the result
}];

Другие советы

i hope this will also help you

-(void)facebookPost:(NSString *)text{
     ACAccountStore *facebookaccount1 = [[ACAccountStore alloc] init];
     ACAccountType *facebookaccountType = [facebookaccount1 accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];
    // Specify App ID and permissions
    NSDictionary *options = @{ ACFacebookAppIdKey: @"xxxxxxxxxxxxxxx", ACFacebookPermissionsKey: @[@"publish_stream"], ACFacebookAudienceKey: ACFacebookAudienceFriends };
    [facebookaccount1 requestAccessToAccountsWithType:facebookaccountType options:options completion:^(BOOL granted, NSError *error) {
    if(granted) {
        NSArray *accountsArray = [facebookaccount1 accountsWithAccountType:facebookaccountType];
        if ([accountsArray count] > 0)
        {
            NSDictionary *parameters = @{@"message": text};

            SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                            requestMethod:SLRequestMethodPOST
                                                                      URL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"]
                                                               parameters:parameters];

            NSString *link = [NSString stringWithFormat:@"%simages/%@",ServerPath,[images objectAtIndex:imageNO]];  // image link
            NSURL *url = [NSURL URLWithString:link];
            NSData *data = [NSData dataWithContentsOfURL:url];

            // code for compress image you can delete this code if you dont want to compress image 
            CGFloat compression = 1.0f;
            CGFloat maxCompression = 0.0f;
            int maxFileSize = 150*224;
            UIImage *img1  = [[UIImage alloc] initWithData:data];
            NSData *imageData = UIImageJPEGRepresentation(img1, compression);

            while ([imageData length] > maxFileSize && compression > maxCompression)
            {
                compression -= 0.1;
                imageData = UIImageJPEGRepresentation(img1, compression);
            }

            // imageData is your image
            [facebookRequest addMultipartData: imageData
                                     withName:@"source"
                                         type:@"multipart/form-data"
                                     filename:@"TestImage"];
            ACAccount *facebookAccount1 = [accountsArray objectAtIndex:0];
            [facebookRequest setAccount:facebookAccount1];

            [facebookRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
             {
                 // Log the result
             }];
        }
    }
}];


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top