0

だから私は、ユーザーが Facebook Graph API を使用して場所にチェックインしたときに写真をアップロードできるようにする必要がある iPhone アプリを作成しています。

今私のコードはこれです:

if (![delegate.facebook isSessionValid])
    [delegate.facebook authorize:[NSArray arrayWithObjects:@"publish_stream", @"offline_access", @"publish_checkins", nil]];

parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:[placeDictionary objectForKey:@"id"] , @"place",
              serialisedCoordinates, @"coordinates",
              message, @"message",
              pickedImage, @"picture",
              @"Via the official REDACTED app", @"application", nil];

[delegate.facebook requestWithGraphPath:@"me/checkins" andParams:parameters andHttpMethod:@"POST" andDelegate:fbCheckInResultHandler];

「pickedImage」は、UIImagePickerController から返された UIImage です。

画像を選択しても (つまり、pickedImage != nil)、チェックイン時に画像がアップロードされません。チェックインはメッセージ、座標、アプリ情報と共に Facebook に表示されますが、画像はありません。

誰かが助けてくれることを本当に願っています。

乾杯、キラン

チェックインが行われたときに呼び出される関数全体を次に示します。

-(void)fbPostCheckInWithMessage:(NSString *)message andFriends:(NSArray *)friends {

if (![delegate.facebook isSessionValid]) {
    NSLog(@"Session invalid");
    [delegate.facebook authorize:[NSArray arrayWithObjects:@"publish_stream", @"offline_access", @"publish_checkins", nil]];
} else {
    NSLog(@"Session valid");
}



NSMutableString *friendsIDString;
friendsIDString = [NSMutableString stringWithFormat:@"%@", [[friends objectAtIndex:0] userID]];

if ([friends count] > 1) {
    for (User *f in taggedFriends) {
        if (f != [taggedFriends objectAtIndex:0]) {
            [friendsIDString appendString:[NSString stringWithFormat:@", %@", f.userID]];
        }
    }
}

NSLog(@"Tagged Friends: %@", friendsIDString);
SBJSON *jsonWriter = [SBJSON new];

NSMutableDictionary *locationDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%f", userLocation.coordinate.latitude], @"latitude",
                                           [NSString stringWithFormat:@"%f", userLocation.coordinate.longitude], @"longitude", nil];

NSString *serialisedCoordinates = [jsonWriter stringWithObject:locationDictionary];

NSData *pictureData = UIImagePNGRepresentation(pickedImage);
NSLog(@"picture: %@", pictureData);

NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:[placeDictionary objectForKey:@"id"] , @"place",
                      serialisedCoordinates, @"coordinates",
                      pictureData, @"message",
                      pickedImage, @"picture",
                      @"Via the official REDACTED app", @"application", nil];

[delegate.facebook requestWithGraphPath:@"me/checkins" andParams:parameters andHttpMethod:@"POST" andDelegate:fbCheckInResultHandler];
}

friendsIDString を使用して、ユーザーの友達の ID を取得しています。問題の原因 (写真のタグ付け) を特定しようとしていたため、すべてコメントアウトされていたため、ここの例からこの機能を削除しました。それを明らかにしたかっただけです。

--UPDATE-- PickedImage の設定方法は次のとおりです。UIImagePickerController のデリゲート メソッドを使用します。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    NSLog(@"Picked image");
    pickedImage = [[UIImage alloc] init];
    pickedImage = image;
   [imagePickerController dismissModalViewControllerAnimated:YES];
}
4

1 に答える 1

1

以下を使用して、Facebook に写真をアップロードできます。

NSData *yourImageData= UIImagePNGRepresentation(yourImage);

辞書を初期化します:-

NSMutableDictionary *mutableDictWithParam= [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Your text", @"message", yourImageWithData, @"theSource", nil];  

最後にポストを送ってください:-

[facebook requestWithGraphPath:@"/me/photos" andParams:mutableDictWithParam andHttpMethod:@"POST" andDelegate:self]; 

あなたのアプリでは、NSDataオブジェクト(pickedimage)を初期化していないと思います..それ以外はすべて問題ないようです。

私たちの議論によると、これを使用して画像を圧縮できます:-

NSData* UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);
NSData *compressedImage = UIImagePNGRepresentation(yourIMage, .5)//quality is ensured through second argument lies between o and 1
于 2012-05-15T20:42:51.827 に答える