VKontakte iOS SDK

शुभ संध्या

यह सब इस तथ्य से शुरू हुआ कि iOS के लिए सामाजिक नेटवर्क VKontakte के एपीआई के साथ काम करने के लिए अधिक या कम सुविधाजनक उपकरण की आवश्यकता थी। हालाँकि, Google ने मुझे खोज परिणामों से जल्दी परेशान कर दिया:

सब कुछ ठीक लगता है, सबसे महत्वपूर्ण बात यह है, लेकिन उपयोग सुखद संवेदनाओं का कारण नहीं बनता है।

कट के तहत, मैं आपको बताता हूं कि VKontakte iOS SDK का नया संस्करण कैसे काम करता है, यह सब कैसे शुरू हुआ और कहां आया।


पूर्व की


यह सब इस तथ्य से शुरू हुआ कि काम पर उन्हें सामाजिक नेटवर्क को एप्लिकेशन से जोड़ने का काम मिला। हम चाहते थे कि विभिन्न सामाजिक नेटवर्क के साथ बातचीत करते समय उपयोगकर्ता को कोई अंतर न दिखाई दे (दीवार पर फ़ोटो पोस्ट करना, संदेश भेजना, फ़ोटो अपलोड करना, आदि)।
यह तैयार किए गए समाधानों की तलाश करने का निर्णय लिया गया था जिसमें VKontakte, Odnoklassniki, Twitter और Facebook जैसे कई सामाजिक नेटवर्क शामिल होंगे, लेकिन उन्हें कुछ भी नहीं मिला। अलग-अलग तैयार समाधानों का उपयोग करने से वांछित परिणाम नहीं मिले, इसलिए हमने फेसबुक आईओएस एसडीके, एमजीटरविटरजाइन और कई अन्य उल्लेखनीय पुस्तकालयों का अध्ययन करने के बाद अपनी बाइक लिखने का फैसला किया।

परिणामस्वरूप, हमें ASASocialServices (GitHub) मिला।
परियोजना का उपयोग करना और स्थापित करना आसान हो गया, ट्विटर और Vkontakte के साथ काम करने पर अधिक ध्यान दिया गया, यह फेसबुक पर ध्यान केंद्रित नहीं करने का निर्णय लिया गया।

ASASocialServices में, तीन सामाजिक नेटवर्क के साथ काम करते हैं (इसके बाद हम केवल दो के बारे में बात करेंगे) एक सिद्धांत के अनुसार किया गया था: प्रोग्रामर एक UIWebView बनाता है, यह स्थिति देता है और इसे प्रदर्शित करता है, फिर उपयोगकर्ता द्वारा आवेदन के प्राधिकरण की प्रक्रिया शुरू करता है और, उपयोगकर्ता द्वारा किए गए निर्णय के आधार पर, तीन ब्लॉकों में से एक को बुलाया जाता है। -हैंडलर (सफलता, त्रुटि, रद्द)।

संदर्भ में देखें, ViewController.h कुछ इस तरह दिखता है:
#import <UIKit/UIKit.h> #import "ASASocialServices.h" @interface ViewController : UIViewController @property UIWebView *webView; @property ASATwitterCommunicator *tw; @end 


ViewController.m
 #import "ViewController.h" NSString *const kTWITTER_CONSUMER_KEY = @"v8146mdwpo05uEroMnhozg"; NSString *const kTWITTER_CONSUMER_SECRET = @"5AFkvjCKxqGBRId2fpSQFLClJLKtGcPGS1DzK7o"; @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //  WebView        CGRect frame = [[UIScreen mainScreen] bounds]; _webView = [[UIWebView alloc] initWithFrame:frame]; [self.view addSubview:_webView]; //  TwitterCommunicator    _tw = [[ASATwitterCommunicator alloc] initWithWebView:_webView]; //         [_tw startOnCancelBlock:^{ NSLog(@"User canceled app authorization..."); } onErrorBlock:^(NSError *error) { NSLog(@"error during app authorization...%@", error); } onSuccessBlock:^(ASATwitterUserAccount *account) { NSLog(@"Account: %@", account); }]; } @end 


कनेक्ट करने और किसी अन्य सामाजिक नेटवर्क के साथ काम करना शुरू करने के लिए ASAVkontakteCommunicator या ASAFacebookCommunicator के साथ ASATwitterCommunicator को बदलना पर्याप्त था।
अंतिम ब्लॉक में - सफलता, संबंधित नेटवर्क के उपयोगकर्ता खाते को स्थानांतरित किया गया था (एक्सेस टोकन, उपयोगकर्ता आईडी, एक्सेस टोकन की समाप्ति समय, आदि)

वर्तमान उपयोगकर्ता की ओर से बाद में अनुरोध इस तरह से किए जा सकते हैं:
 [account performTwitterMethod:kTWITTER_FOLLOWERS_LIST_URL HTTPMethod:@"GET" options:@{@"user_id" : account.twitterUserID, @"include_entities": @"true"} success:^(id response) { NSLog(@"response: %@", response); } failure:^(NSError *error) { NSLog(@"error: %@", error); }]; 


यहां देखें कि ट्विटर की स्थिति अपडेट क्या है:
 [account performTwitterMethod:kTWITTER_STATUSES_UPDATE_URL HTTPMethod:@"POST" options:@{@"status": @"Hello from ASASocialServices Framework!"} success:^(id response) { NSLog(@"response: %@", response); } failure:^(NSError *error) { NSLog(@"error: %@", error); }]; 


सब कुछ ठीक हो जाएगा, लेकिन उपयोग के दौरान, हमने महसूस किया कि प्रोग्रामर को टोकन छोड़ना, बाद में लोड करना बिल्कुल सही नहीं था क्योंकि हमारा मुख्य लक्ष्य पुस्तकालय को इतना सरल बनाना था कि हमें इस तरह से trifles के बारे में सोचना न पड़े (इस पर पुस्तकालय) मंच की मृत्यु हो गई और इसके विकास / समर्थन से निपटने के लिए आवश्यक था, जैसा कि बाद के सभी विकासों के साथ हुआ)।

विपक्ष:


VKontakte iOS SDK v1.0


ASASocialServices के साथ, मैं अब कोई गड़बड़ नहीं करना चाहता था, इसलिए मैंने फैसला किया कि मैं अपने खाली समय में VKontakte के लिए SDK लिखना शुरू करूंगा। मैंने कागज के एक टुकड़े पर कक्षाओं की बातचीत के एक आरेख को दो दिनों के लिए "लटका" दिया, अंत में मैंने फैसला किया कि यह पहले संस्करण जैसा दिखता है - मैंने कार्यान्वयन शुरू किया।

मैं रूबी को पसंद करता हूं और मुझे रेल पसंद है, किसी कारण से, यह हमेशा और अभी भी लगता है कि यह वह था, जिसने कुछ हद तक, Vkontakte iOS SDK के रूप को प्रभावित किया।

उपयोगकर्ता इस तरह की वस्तुओं के साथ जुड़ा हुआ है:


प्रत्येक ऑब्जेक्ट में कार्यों की एक सूची होती है जिसे उपयोगकर्ता अपनी ओर से कर सकता है:


यहाँ बताया गया है कि उपरोक्त क्रियाएँ VKontakte iOS SDK v1.0 में कैसे दिखेंगी:

फ़ोटो एल्बम बनाना:
  VKUser *me = [VKUser currentUser]; [[me photoAlbums] createTitle:@", !" description:@"    "]; 

छवि

समूह में शामिल हों:
  VKUser *me = [VKUser currentUser]; [[me groups] joinGroupID:100500]; 


सेट स्थिति:
  VKUser *me = [VKUser currentUser]; [[me status] setStatus:@", !"]; 


उन मित्रों की सूची प्राप्त करें जो अब ऑनलाइन हैं:
 id result = [[[VKUser currentUser] friends] online]; 


कहाँ से शुरू करें?

मान लीजिए कि आपने पहले ही Vkontakte IOS SDK v1.0 को अपनी परियोजना में जोड़ लिया है और यह नहीं जानते कि इसके साथ आगे क्या करना है।

हम VKConnector वर्ग के साथ काम करेंगे, जो हमें एक बार प्राप्त एक्सेस टोकन को + सेव + करने + का उपयोग करने की अनुमति देगा, और सही समय पर यह हमें सूचित करेगा कि टोकन को अपडेट करना आवश्यक है और संबंधित प्रतिनिधि विधि को कॉल करेगा, जो VKConnectorProtocol का पालन कर सकता है या नहीं कर सकता है।

यहाँ ASAAppDelegate.m में सबसे सरल कनेक्शन विधि क्या होगी:
 // // ASAAppDelegate.m // Vkontakte iOS SDK_Project // // Created by AndrewShmig on 05/27/13. // Copyright (c) 2013 AndrewShmig. All rights reserved. // #import "ASAAppDelegate.h" #import "ASAViewController.h" #import "VKUser.h" static NSString *const kVKAppID = @"3541027"; static NSString *const kVKPermissionsArray = @"photos,friends,wall,audio,video,docs,notes,pages,status,groups,messages"; @implementation ASAAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [[VKConnector sharedInstance] setDelegate:self]; [[VKConnector sharedInstance] startWithAppID:kVKAppID permissons:[kVKPermissionsArray componentsSeparatedByString:@","]]; // Override point for customization after application launch. self.viewController = [[ASAViewController alloc] initWithNibName:@"ASAViewController" bundle:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } - (void)VKConnector:(VKConnector *)connector willShowModalView:(KGModal *)view { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector willHideModalView:(KGModal *)view { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector accessTokenInvalidated:(VKAccessToken *)accessToken { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector accessTokenRenewalFailed:(VKAccessToken *)accessToken { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector accessTokenRenewalSucceeded:(VKAccessToken *)accessToken { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector connectionErrorOccured:(NSError *)error { NSLog(@"%s", __FUNCTION__); } - (void)VKConnector:(VKConnector *)connector parsingErrorOccured:(NSError *)error { NSLog(@"%s", __FUNCTION__); } @end 


शुरू करने के बाद, उपयोगकर्ता को आवेदन को अधिकृत करने के लिए एक मोडल विंडो (KGModal का उपयोग किया गया था) जैसा कुछ दिखाई देगा:
छवि

यदि प्रश्न उठते हैं या आप नहीं जानते हैं कि यह विधि क्या है (इसके लिए क्या जिम्मेदार है), तो प्रलेखन से संपर्क करने में संकोच न करें। प्रलेखन AppleDoc का उपयोग करके उत्पन्न होता है और आम तौर पर इस तरह दिखता है:
छवि

VKConnectorProtocol:
छवि

Xcode इससे मदद करेगा:
छवि

निष्कर्ष में


लेख, यह मुझे प्रतीत होता है, काफी लंबा हो गया है, इसलिए मैं यहां अभी के लिए रुक जाऊंगा, हालांकि दुर्भाग्य से मैंने जो कुछ भी योजना बनाई थी उसका ज्यादा उल्लेख नहीं किया था (फ़ाइलों को डाउनलोड करना, टोकन को अपडेट करना, त्रुटि से निपटने, आदि)

मैं यह नोट करना चाहता हूं कि परियोजना सक्रिय रूप से विकसित और समर्थित है। परियोजना की वर्तमान स्थिति "रेडी" है, इसलिए v1.0 में केवल त्रुटियों को ठीक किया जाएगा और मामूली समायोजन किया जाएगा। सभी वैश्विक परिवर्तन v2.0 में माइग्रेट किए जाते हैं।

आप इस लिंक पर सबसे वर्तमान संस्करण पा सकते हैं: GitHub ( https://github.com/AndrewShmig/Vkontakte-iOS-SDK )

Vkontakte iOS SDK v2.0 पर कुछ जानकारी यहां पाई जा सकती है: GitHub ( https://github.com/AndrewShmig/Vkontakte-iOS-SDK-v2.0/issues?babels=Future+features&state=open )

आपका ध्यान देने के लिए धन्यवाद।

Source: https://habr.com/ru/post/In184560/


All Articles