2013-03-05 10 views
8

के लिए वापस लौटने की आवश्यकता है हमें फ़ाइल के लिए एक साझा लिंक बनाने की आवश्यकता है और फिर उस लिंक को पुनः प्राप्त करें ताकि कि हम इसे हमारे एप्लिकेशन के अंदर प्रदर्शित कर सकें। हम किसी विशिष्ट फ़ाइल के लिए साझा लिंक बनाने में सक्षम हैं (हम इसे वेब पर बॉक्स खाते के अंदर देख सकते हैं) लेकिन हम एपीआई के माध्यम से साझा लिंक्स को पुनः प्राप्त करने में सक्षम नहीं हैं। यह हमेशा शून्य है, हालांकि isShared विधि हाँ देता है।आईओएस बॉक्सएसडीके साझा लिंक्स

BoxObject.h की हेडर फ़ाइल से हम पाते हैं कि ये दो विधियां आइटम की साझा स्थिति के बारे में आवश्यक जानकारी प्रदान करती हैं।

@protocol BoxObject 
// ... 


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

//... 
@end 

इस प्रकार हम साझा लिंक बनाते हैं।

  1. BoxFile है कि हम साझा करना चाहते हैं का पता लगाएं, कॉल आपत्ति है कि तस्वीर की सुविधा देता है पहले बुला विधि shareWithPassword: संदेश: ईमेल: कॉलबैक :, [photo isShared] रिटर्न सं।
  2. हम [photo shareWithPassword:@"" message:@"" emails:[NSArray arrayWithObject:@""] callbacks:^(id<BoxOperationCallbacks> on1){...}];
  3. अंदर फोन on1.after हम अगर प्रतिक्रिया == जाँच BoxCallbackResponseSuccessful और फिर हम कहते हैं [तस्वीर updateWithCallbacks:^(आईडी On2) {..}]
  4. अंदर on2.after हम अगर जाँच प्रतिक्रिया == BoxCallbackResponseSuccessful
  5. सफल प्रतिक्रिया पर [photo isShared] रिटर्न हाँ लेकिन [तस्वीर sharedLink] शून्य

रिटर्न और अगर हम वेब पर जाँच, हम देख सकते हैं कि फ़ाइल वास्तव में है साझा किया गया लेकिन हम बॉक्स एसडीके से साझा लिंक को पुनः प्राप्त नहीं कर सकते हैं।

किसी को भी एक ही समस्या है?

+0

यदि आप इस प्रक्रिया के दौरान HTTP ट्रैफ़िक पोस्ट कर सकते हैं तो यह सहायक होगा। यह जानकारी उस समस्या को अलग करने में मदद करेगी जो बॉक्स आपको भेज रहा है, या जिस तरह से आईओएस एसडीके इसका व्याख्या कर रहा है। यदि आप मैक पर काम कर रहे हैं, तो आप यातायात को पकड़ने के लिए HTTPScoop जैसे टूल का उपयोग कर सकते हैं। –

+0

पहले से ही Wireshark के साथ कोशिश की। अनुरोध HTTPS के माध्यम से जाते हैं और मुझे पता नहीं है कि HTTP के माध्यम से उन्हें मजबूर करने का कोई तरीका है या नहीं। – dtrsan

+0

HTTPScoop [कुछ जानकारी प्रदान करता है] (http://www.tuffcode.com/support.html#support7) इस पर आप कैसे जा सकते हैं। –

उत्तर

0

मैं फ़ोल्डर को रीफ्रेश करके शेयर लिंक प्राप्त करने में सक्षम था। यह वह कोड है जिसके साथ मैं आया था:

[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]; 
     } 
    }); 
}]; 

यह पुराने v1 API के साथ है। सुनिश्चित नहीं है कि यह नए v2 के साथ बदल गया है।

0

आपने संपादन बॉक्स 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

यह मेरे लिए काम कर रहा है, कोड पहले से ही तैनात हैं और जानकारी 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

उत्कृष्ट उत्तर ... प्रत्यक्ष परियोजना मेरी परियोजना में चिपकाया :) धन्यवाद एक टन ... – Karun

संबंधित मुद्दे