2015-04-01 11 views
5

ho notato è possibile condividere video NSData a Facebook Messenger semplicemente:Come condividere NSData o il video phasset utilizzando Facebook per iOS SDK 4.0 FBSDKShareDialog

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

ma sto avendo difficoltà a fare lo stesso se condividono di feed facebook utilizzando file video locale o 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 = Solo gli URL dei file risorsa sono ammessi per la finestra di dialogo nativa

Come potrei fare per avere simili bella app-switching comportamento utilizzando il video phasset?

Grazie!

risposta

12

Con il nuovo SDK di Facebook 4.0, i video devono essere passati come URL delle risorse. Devi copiare il tuo percorso video locale nella Raccolta di asset e utilizzare quell'URL generato per condividerlo su Facebook.

Fase 1:

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

Fase 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]; 
    } 
} 

Fase 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]; 

Se avete qualsiasi altra richiesta per favore fatemelo sapere.

Grazie!

+3

Grazie per il suggerimento! Funzionerebbe, ma il video che mi piacerebbe condividere esiste già nella libreria di foto dal momento che è un PHAsset. Non vorrei creare un'altra copia. Posso salvare il video PHAsset in locale temporaneamente (come ho risolto alcuni altri problemi di condivisione correlati) o utilizzare i suoi dati. Ma non c'è davvero un modo per collegare PHAsset ad ALAsset per quanto ne so? Non c'è modo di condividere i video di PhotoKit usando Facebook SDK 4.0 FBSDKShareDialog? – Fabe

+0

Questo è il nuovo URL generato !! 'assets-library: //asset/asset.mp4? id = E121FF88-B0AB-4EE9-BD60-E676617BDC54 & ext = mp4' – jose920405

+0

E 'possibile farlo qui di seguito senza mostrare alcuna modale e inserire descrizione e titolo nel video? – jose920405

0

Controllare: 1) I video devono avere dimensioni inferiori a 12 MB. 2) Le persone che condividono dovrebbero avere installato il client Facebook per iOS, versione 26.0 o successiva.

si consiglia di utilizzare la linea di seguito:

NSURL *movieUrl = [info objectForKey:UIImagePickerControllerReferenceURL]; 

invece di

NSURL *movieUrl = [info objectForKey:UIImagePickerControllerMediaURL];