2015-04-01 3 views
5

ich Sie NSData teilen können Video einfach auf Facebook Messenger bemerkt zu teilen:Wie NSData oder phasset Video mit Facebook iOS SDK 4.0 FBSDKShareDialog

NSData *videoData = [NSData dataWithContentsOfURL:localVideoUrl]; 
[FBSDKMessengerSharer shareVideo:videoData withOptions:options]; 

Aber ich habe Schwierigkeiten das gleiche tun, wenn auf facebook feed teilen Verwenden Sie eine lokale Videodatei oder ein Phasset.

FBSDKShareVideo *video = [FBSDKShareVideo videoWithVideoURL:localVideoUrl]; 
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init]; 
[content setVideo: video]; 
[FBSDKShareDialog showFromViewController:nil withContent:content delegate:self]; 

com.facebook.sdk: FBSDKErrorDeveloperMessageKey = Nur Datei-URLs Vermögenswert für den nativen erlaubt Dialog

Wie würde ich mich über die ähnliche nette app-Schaltverhalten phasset Video mit?

Danke!

Antwort

12

Mit dem neuen Facebook SDK 4.0 müssen Videos als Assets URL übergeben werden. Sie müssen Ihren lokalen Videopfad in die Medienbibliothek kopieren und die generierte URL für die Freigabe auf Facebook verwenden.

Schritt 1:

NSURL *videoURL=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"IMG_1007" ofType:@"mp4"]]; 
[self saveToCameraRoll:videoURL]; 

Schritt 2:

- (void)saveToCameraRoll:(NSURL *)srcURL 
{ 
    NSLog(@"srcURL: %@", srcURL); 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    ALAssetsLibraryWriteVideoCompletionBlock videoWriteCompletionBlock = 
    ^(NSURL *newURL, NSError *error) { 
     if (error) { 
      NSLog(@"Error writing image with metadata to Photo Library: %@", error); 
     } else { 
      NSLog(@"Wrote image with metadata to Photo Library %@", newURL.absoluteString); 
      url_new = newURL; 
     } 
    }; 

    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:srcURL]) 
    { 
     [library writeVideoAtPathToSavedPhotosAlbum:srcURL 
            completionBlock:videoWriteCompletionBlock]; 
    } 
} 

Schritt 3:

FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init];  
NSURL *videoURL = url_new; 
FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init]; 
video.videoURL = videoURL; 
FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init]; 
content.video = video; 
shareDialog.shareContent = content; 
shareDialog.delegate = self; 
[shareDialog show]; 

Wenn Sie irgendeine andere Frage haben, bitte lassen Sie mich wissen.

Danke!

+3

Danke für den Vorschlag:

sollten Sie die folgende Zeile verwenden! Das würde funktionieren, aber das Video, das ich teilen möchte, existiert bereits in der Fotobibliothek, da es ein PHAsset ist. Ich möchte keine weitere Kopie erstellen. Ich kann PHAsset-Video lokal vorübergehend speichern (wie ich einige andere ähnliche Probleme gelöst habe) oder seine Daten verwenden. Aber es gibt nicht wirklich eine Möglichkeit, PHAsset nach meinem Wissen mit ALAsset zu verbinden? Es gibt keine Möglichkeit, PhotoKit-Videos mit Facebook SDK 4.0 FBSDKShareDialog zu teilen? – Fabe

+0

Dies ist die neue URL generiert !! 'assets-library: //asset/asset.mp4? id = E121FF88-B0AB-4EE9-BD60-E676617BDC54 & ext = mp4' – jose920405

+0

Es ist möglich, dies zu tun, ohne irgendein modales anzuzeigen und Beschreibung und Titel zum Video zu setzen? – jose920405

0

Bitte überprüfen Sie: 1) Die Videos müssen weniger als 12 MB groß sein. 2) Personen, die teilen, sollte Facebook für iOS-Client installiert haben, Version 26.0 oder höher.

NSURL *movieUrl = [info objectForKey:UIImagePickerControllerReferenceURL]; 

statt

NSURL *movieUrl = [info objectForKey:UIImagePickerControllerMediaURL];