VKontakte iOS SDK

こんばんは



それはすべて、iOS向けソーシャルネットワークVKontakteのAPIを操作するために多少なりとも便利なツールが必要だったという事実から始まりました。 しかし、Googleはすぐに検索結果に腹を立てました。



すべてがうまくいくように見えますが、最も重要なことはそうですが、使用は心地よい感覚をもたらしません。



カットの下で、VKontakte iOS SDKの新しいバージョンがどのように機能するか、どのようにすべてが始まり、どこに来たかを説明します。





事前設計



それはすべて、職場でソーシャルネットワークをアプリケーションに接続するタスクを得たという事実から始まりました。 異なるソーシャルネットワークとのやり取り(壁への写真の投稿、メッセージの送信、写真のアップロードなど)の際に、ユーザーが違いに気付かないようにしたかったのです。

VKontakte、Odnoklassniki、Twitter、Facebookなどのいくつかのソーシャルネットワークを含む既製のソリューションを探すことにしましたが、何も見つかりませんでした。 既製のソリューションを個別に使用しても望ましい結果が得られなかったため、Facebook iOS SDK、MGTwitterEngine、およびその他の注目すべきライブラリをいくつか検討した後、バイクを作成することにしました。



その結果、 ASASocialServices (GitHub)を取得しました

このプロジェクトは使いやすく、インストールが簡単であることが判明し、TwitterとVkontakteとの連携にさらに注意が払われ、Facebookに集中しないことが決定されました。



ASASocialServicesでは、3つのソーシャルネットワーク(以下2つのみを説明します)での作業が単一の原則に従って実行されました:プログラマーはUIWebViewを作成し、それを配置して表示し、アプリケーションのユーザーによる承認プロセスを開始し、ユーザーの決定に応じて、3つのブロックの1つが呼び出されます-handlers(成功、エラー、キャンセル)。



コンテキストで表示すると、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
      
      







別のソーシャルネットワークに接続して作業を開始するには、ASATwitterCommunicatorをASAVkontakteCommunicatorまたはASAFacebookCommunicatorに置き換えるだけで十分でした。

最後のブロック-成功、対応するネットワークのユーザーアカウントが転送されました(アクセストークン、ユーザーID、アクセストークンの有効期限など)



現在のユーザーに代わって次のリクエストをこの方法で行うことができます。

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







Twitterステータスの更新は次のようになります。

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







すべてがうまくいきますが、使用の過程で、トークンをプログラマに任せると、その後の読み込みは正しくないことに気付きました。なぜなら、私たちの主な目標はライブラリを単純化することであり、このような些細なことを考える必要はありませんステージが終了し、その後のすべての開発と同様に、開発/サポートのみを処理する必要がありました)。



短所:





VKontakte iOS SDK v1.0



ASASocialServicesを使用することで、いらいらする必要がなくなったため、自由時間にVKontakte用のSDKの作成を開始することにしました。 クラスの相互作用の図を紙にスケッチし、2日間「ぶら下げ」、最終的には最初のバージョンのように見えると判断し、実装を開始しました。



私はRubyが好きで、Railsが好きです。何らかの理由で、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クラスを使用して作業します。これにより、受信したアクセストークンを1回受信+保存+使用できるようになり、適切なタイミングで、トークンを更新する必要があることを通知し、対応するデリゲートメソッドを呼び出します。これは、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?labels=Future+features&state=open )にあります。



ご清聴ありがとうございました。



All Articles