2012-08-31 23 views
10

मैं अपनी साइट पर उपलब्ध एसडीके का उपयोग करके अपने ऐप में ड्रॉपबॉक्स जोड़ रहा हूं। एक खाते के साथ [[DBSession sharedSession] linkFromController:self]; लिंक के बाद कुछ विधि कॉल करने का कोई तरीका है?ड्रॉपबॉक्स एसडीके - लिंकफ्रॉम नियंत्रक: प्रतिनिधि या कॉलबैक?

मूल रूप से मैं ड्रॉपबॉक्स में लॉग इन करने का प्रयास करने के बाद [self.tableView reloadData] पर कॉल करना चाहता हूं। इसे सफल या असफल लॉगिन के बीच भेदभाव करने की भी आवश्यकता नहीं है।

उत्तर

16

ड्रॉपबॉक्स एसडीके आपके ऐपडिलेगेट को कॉलबैक रिसीवर के रूप में उपयोग करता है। तो जब आपने [[DBSession sharedSession] linkFromController:self]; कहा है तो ड्रॉपबॉक्स एसडीके किसी भी मामले में आपकी ऐपडिलेगेट की – application:openURL:sourceApplication:annotation: विधि कॉल करेगा।

तो ऐपडिलेगेट के भीतर आप लॉगिन सफल होने के बाद [[DBSession sharedSession] isLinked] द्वारा देख सकते हैं। दुर्भाग्य से आपके व्यू कंट्रोलर के लिए कॉलबैक नहीं है, इसलिए आपको इसे अन्य माध्यमों से सूचित करना होगा (प्रत्यक्ष संदर्भ या अधिसूचना पोस्ट करें)।

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 
     if ([[DBSession sharedSession] isLinked]) { 
      // At this point you can start making API Calls. Login was successful 
      [self doSomething]; 
     } else { 
      // Login was canceled/failed. 
     } 
     return YES; 
    } 
    // Add whatever other url handling code your app requires here 
    return NO; 
} 

ऐप्पल की नीतियों के साथ किसी समस्या के कारण ऐप को वापस कॉल करने का यह अजीब तरीका ड्रॉपबॉक्स द्वारा पेश किया गया था। एसडीके के पुराने संस्करणों में लॉगिन करने के लिए एक बाहरी सफारी पृष्ठ खोला गया होगा। कुछ समय पर ऐप्पल ऐसे ऐप्स स्वीकार नहीं करेगा। तो ड्रॉपबॉक्स लोगों ने आंतरिक दृश्य नियंत्रक लॉगिन शुरू किया, लेकिन ऐपडिलेगेट को परिणामों के प्राप्तकर्ता के रूप में रखा। यदि उपयोगकर्ता के पास अपने डिवाइस पर ड्रॉपबॉक्स ऐप इंस्टॉल है, तो लॉगिन ड्रॉपबॉक्स ऐप पर निर्देशित किया जाएगा, साथ ही ऐपडिलेगेट को बदले में बुलाया जाएगा।

5

अनुप्रयोग प्रतिनिधि ऐड में:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if ([[DBSession sharedSession] handleOpenURL:url]) { 

     [[NSNotificationCenter defaultCenter] 
     postNotificationName:@"isDropboxLinked" 
     object:[NSNumber numberWithBool:[[DBSession sharedSession] isLinked]]]; 

     return YES; 
    } 

    return NO; 
} 

और आप कस्टम कक्षा में:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //Add observer to see the changes 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isDropboxLinkedHandle:) name:@"isDropboxLinked" object:nil]; 

} 

और

- (void)isDropboxLinkedHandle:(id)sender 
{ 
    if ([[sender object] intValue]) { 
     //is linked. 
    } 
    else { 
     //is not linked 
    } 
} 
+0

यह अच्छी तरह से काम किया है ... धन्यवाद! – orafaelreis

+0

धन्यवाद श्रीमान, मैंने इस तरह कुछ खोजने के लिए घंटों खो दिए! –

+0

धन्यवाद सर, यह मेरे लिए काम करता है! –