2015-09-15 14 views
8

Attualmente sto aggiornando una delle mie app per essere compatibile con iOS9 e ho problemi con la condivisione della funzione Instagram. Sto usando gli hook di Instagram come indicato sul sito degli sviluppatori: (https://instagram.com/developer/mobile-sharing/iphone-hooks/)iOS9 - Condivisione su Instagram (con ganci) non funzionante

L'immagine che desidero condividere viene generata correttamente, con il suffisso .igo e la funzionalità funziona ancora come previsto su iOS8. Sembra aver rotto con la nuova versione di iOS.

Ecco il codice per la condivisione di Instagram, utilizzando l'UIDocumentInteractionController:

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; 

if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { 

    //convert image into .png format. 
    NSData *imageData = UIImagePNGRepresentation(image); 

    //create instance of NSFileManager 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    //create an array and store result of our search for the documents directory in it 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    //create NSString object, that holds our exact path to the documents directory 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    //add our image to the path 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"insta.igo"]]; 

    //finally save the path (image) 
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; 

    CGRect rect = CGRectMake(0 ,0 , 0, 0); 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIGraphicsEndImageContext(); 

    NSString *fileNameToSave = [NSString stringWithFormat:@"Documents/insta.igo"]; 
    NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNameToSave]; 
    NSLog(@"jpg path %@",jpgPath); 

    NSString *newJpgPath = [NSString stringWithFormat:@"file://%@",jpgPath]; 
    NSLog(@"with File path %@",newJpgPath); 

    NSURL *igImageHookFile = [[NSURL alloc]initFileURLWithPath:newJpgPath]; 
    NSLog(@"url Path %@",igImageHookFile); 

    self.documentController = [UIDocumentInteractionController interactionControllerWithURL:igImageHookFile]; 
    [self.documentController setDelegate:self]; 
    [self.documentController setUTI:@"com.instagram.exclusivegram"]; 
    [self.documentController presentOpenInMenuFromRect:rect inView:self.view animated:YES]; 

} else { 
    NSLog (@"Instagram not found"); 
} 

E 'probabilmente la pena ricordare che ho già configurato i schemi URL nella info.plist come richiesto con i cambiamenti iOS9.

Viene visualizzato UIDocumentInteractionController e l'opzione 'Copia su Instagram'. Premendo questa opzione si giunge al licenziamento del controller, senza che vengano richiamati messaggi di registro o punti di interruzione sul delegato del controller (impostato su self, il controller della vista).

Se qualcuno ha o ha avuto problemi con questo, sarebbe bello sentire i tuoi pensieri, o meglio ancora, come è stato risolto.

Aggiornamento

E 'anche opportuno ricordare, su un dispositivo iOS 8, il controller Interazione documento mostra un 'Apri in Instagram' pulsante. Il dispositivo iOS9 mostra un pulsante "Copia su Instagram".

+0

Avendo lo stesso problema. Sono stato alla ricerca di soluzioni me stesso. – JiuJitsuCoder

risposta

17

Dopo aver modificato questa riga di codice:

NSURL *igImageHookFile = [[NSURL alloc] initFileURLWithPath:newJpgPath]; 

a questo:

NSURL *igImageHookFile = [NSURL URLWithString:newJpgPath]; 

La funzione di Instagram-share per iOS 9 sta attualmente lavorando. Sembra che la precedente riga di codice, convertendo NSString in un NSURL, collocherebbe "-: // file" alla fine del percorso dell'URL, che non sembra registrare bene con iOS 9. Semplicemente convertendo l'NSString in NSURL senza inizializzare come file URL sembra funzionare.

+0

Ha funzionato per me! ** Swift **: 'igImageHookFile = NSURL (stringa: newJpgPath)' – CodeMonkey

+1

per me la rimozione dello schema // file causa UIDocumentInteractionController "schema non valido (null)" :( – ripegooseberry

0

È necessario aggiungere una nuova chiave al file Info.plist; è una modifica di iOS 9 per gli schemi di URL. Controlla la prima risposta per questa domanda: iOS 9 not opening Instagram app with URL SCHEME. E solo FYI, iOS 9 cambia il titolo "Apri in Instagram" per UIDocumentInteractionController su "Copia su Instagram". Non so perché.

+0

Avevo già dichiarato nella mia domanda che avevo aggiunto l'URL schema per Instagram Con l'aggiunta dello schema URL, iOS 9 si è rifiutato ancora di aprire Instagram tramite la mia app e l'UIDocumentInteractionController. –

+0

whoops, ho perso quella parte, ma è strano che non ha funzionato per te perché ha funzionato per me – embersofadyingfire

+0

Potrebbe essere che avessi già il metodo di inizializzazione corretto per NSURL e mancava solo lo schema URL. Un messaggio di log della console che diceva "Questa app non è autorizzata a interrogare per lo schema xxx" apparirebbe se fosse così. la tua risposta però! –

Problemi correlati