2013-03-05 13 views
8

Abbiamo bisogno di creare un collegamento condiviso per un file e quindi recuperare quel collegamento così che possiamo mostrarlo all'interno della nostra applicazione. Siamo in grado di creare un collegamento condiviso per un file specifico (possiamo vederlo nell'account Box sul Web) ma non siamo in grado di riattivare sharedLink tramite l'API. È sempre nullo, sebbene il metodo isShared restituisca SÌ.iOS BoxSDK restituendo nil per sharedLink

Dal file di intestazione di BoxObject.h troviamo che questi due metodi forniscono le informazioni richieste sullo stato condiviso dell'elemento.

@protocol BoxObject 
// ... 


// Information about the shared state of the item 
@property (readonly, getter = isShared) BOOL shared; 
@property (readonly) NSString *sharedLink; 

//... 
@end 

Ecco come creiamo il collegamento condiviso.

  1. Trova BoxFile che vorremmo condividere, consente di chiamare quell'oggetto foto metodo chiamante Prima shareWithPassword: Messaggio: email: callback :, [photo isShared] rendimenti NO.
  2. chiamiamo [photo shareWithPassword:@"" message:@"" emails:[NSArray arrayWithObject:@""] callbacks:^(id<BoxOperationCallbacks> on1){...}];
  3. all'interno on1.after controlliamo se la risposta == BoxCallbackResponseSuccessful e poi ci chiamano [updateWithCallbacks foto:^(id On2) {..}]
  4. all'interno on2.after controlliamo se risposta == BoxCallbackResponseSuccessful
  5. sulla risposta positiva [photo isShared] ritorna sI ma [foto sharedLink] ritorna nil

E se controlliamo sul Web, possiamo vedere che il file è in realtà condiviso ma noi non possiamo riattivare sharedLink dal Box SDK.

Chiunque ha lo stesso problema?

+0

Sarebbe utile se si potesse pubblicare il traffico HTTP durante questo processo. Queste informazioni aiuteranno a isolare il problema sia dai dati inviati da Box, sia dal modo in cui l'SDK di iOS lo sta interpretando. Se stai lavorando su un Mac, potresti utilizzare uno strumento come HTTPScoop per catturare il traffico. –

+0

Già provato con Wireshark. Le richieste passano attraverso HTTPS e non sono a conoscenza se esiste un modo per forzarle tramite HTTP. – dtrsan

+0

HTTPScoop [fornisce alcune informazioni] (http://www.tuffcode.com/support.html#support7) su come aggirare il problema. –

risposta

0

Sono stato in grado di ottenere il collegamento di condivisione aggiornando la cartella stessa. Questo è il codice che ho trovato:

[boxFile shareWithPassword:@"" message:@"" emails:@[ @"" ] callbacks:^(id<BoxOperationCallbacks> on) { 
    on.after(^(BoxCallbackResponse response) { 
     if (response == BoxCallbackResponseSuccessful) { 
      [self.rootFolder updateWithCallbacks:^(id<BoxOperationCallbacks> on) { 
       on.after(^(BoxCallbackResponse response) { 
        BoxFile *updatedBoxFile = (BoxFile*)[self.rootFolder.children objectAtIndex:self.selectedIndexPath.row]; 
        NSString *fileName = updatedBoxFile.name; 
        NSString *shareLink = updatedBoxFile.sharedLink; 

        NSLog(@"%@ [%@]: %@", fileName, updatedBoxFile.isShared ? @"YES" : @"NO", shareLink); 
       }); 
      }]; 
     } else { 
      [BoxErrorHandler presentErrorAlertViewForResponse:response]; 
     } 
    }); 
}]; 

Questo è con la vecchia API v1. Non sono sicuro se è cambiato con il più recente v2.

0

È possibile creare un collegamento condiviso da modificarne le informazioni con la scatola V2:

Box2FolderBlock folderSuccess = ^(Box2Folder *folder) { 
    if (![[folder sharedLink] isEqual:[NSNull null]]) { 
     NSString *sharedUrl = [[folder sharedLink] objectForKey:Box2APIObjectKeyURL]; 
    } else { 
     // failure 
    } 
}; 

Box2FileBlock fileSuccess = ^(Box2File *file) { 
    if (![[file sharedLink] isEqual:[NSNull null]]) { 
     NSString *sharedUrl = [[file sharedLink] objectForKey:Box2APIObjectKeyURL]; 
    } else { 
     // failure 
    } 
}; 

Box2APIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary) { 
}; 

BoxSharedObjectBuilder *sharedLinkObject = [[BoxSharedObjectBuilder alloc] init]; 
sharedLinkObject.access = BoxAPISharedObjectAccessOpen; 

BoxAPIJSONOperation *operation; 

if (isFile == NO) { 

    sharedLinkObject.canPreview = BoxAPISharedObjectPermissionStateEnabled; 

    BoxFoldersRequestBuilder *requestBuilder = [[BoxFoldersRequestBuilder alloc] init]; 
    requestBuilder.sharedLink = sharedLinkObject; 

    operation = [boxSDK.foldersManager editFolderWithID:fileOrFolderId requestBuilder:requestBuilder success:folderSuccess failure:failure]; 

} else { 

    sharedLinkObject.canDownload = BoxAPISharedObjectPermissionStateEnabled; 

    BoxFilesRequestBuilder *requestBuilder = [[BoxFilesRequestBuilder alloc] init]; 
    requestBuilder.sharedLink = sharedLinkObject; 

    operation = [boxSDK.filesManager editFileWithID:fileOrFolderId requestBuilder:requestBuilder success:fileSuccess failure:failure]; 
} 
1

Questo sta lavorando per me, in base al largo del codice già postato e le informazioni trovate su github here

- (void) getShareableLinkForFileId:(NSString *)fileId 
{ 
    BoxFileBlock fileSuccess = ^(BoxFile *file) { 
      NSDictionary *fileInfo = file.rawResponseJSON; 
      if (![fileInfo[@"shared_link"] isEqual:[NSNull null]]) { 
      NSDictionary *linkData = fileInfo[@"shared_link"]; 
      //Do something with the link 
     } else { 
      // failure 
     } 
    }; 
    BoxAPIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary) { 
     //Handle the failure 
    }; 

    BoxFilesRequestBuilder *builder = [[BoxFilesRequestBuilder alloc] init]; 
    BoxSharedObjectBuilder *sharedBuilder = [[BoxSharedObjectBuilder alloc] init]; 
    sharedBuilder.access = BoxAPISharedObjectAccessOpen; 
    builder.sharedLink = sharedBuilder; 
    [[BoxSDK sharedSDK].filesManager editFileWithID:fileId requestBuilder:builder success:fileSuccess failure:failure]; 
} 
+0

Ottima risposta ... Copia diretta incollata nel mio progetto :) Grazie mille ... – Karun

Problemi correlati