VK-ios-sdk-PitNikola 1.3.6

VK-ios-sdk-PitNikola 1.3.6

测试测试版
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2015年11月

Peter Nikolaev 维护。



  • Roman Truba

vk-ios-sdk

用于处理 VK API、通过 VK 应用授权以及使用 VK 功能的库。支持从 6.0 版本的 iOS

准备使用 VK SDK

要主要为使用 VK SDK,您需要创建一个新的 VK 应用程序,在这里选择独立应用程序类型 [这里]。选择一个标题并通过短信确认操作,您将被重定向到应用程序设置页面。您将需要您的应用程序 ID(在文档中称为 API_ID)。填写 iOS 字段的应用程序包。

设置您的应用程序的 URLSchema

要使用通过 VK 应用授权,您需要设置应用程序的 URLSchema,它看起来像 vk+APP_ID(例如,vk1234567)。

有关如何实现您自己的 URL Scheme 的说明,请参阅此处,还有一个不错的 Twitter 教程

为 iOS 9 配置应用程序

iOS 9 改变了应用程序安全性和未加密连接的使用方式。基本上,您不需要在传输安全设置中做任何更改。但是,如果您计划使用带有 "nohttps" 范围的 VK API,则必须通过这种方式更改安全设置(在您的 Info.plist 文件中)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>vk.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

我们不推荐您使用 "nohttps" 范围。

此外,对于 iOS 9,您必须列出应用程序使用的应用程序架构(并检查 canOpenURL:),以便能够打开该应用程序。对于 VK SDK,您应该按以下方式更改您的 Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>vk</string>
    <string>vk-share</string>
    <string>vkauthorize</string>
</array>

将 VK iOS SDK 添加到您的 iOS 应用程序

使用源代码进行安装

VKSdk.frameworkVKSdkResources.bundle 文件添加到您的项目中。在应用程序设置中打开 构建阶段,然后在 链接二进制与库 部分中添加 VKSdk.framework。将 VKSdkResources.bundle 添加到 复制包资源 部分。导入主头

#import <VKSdk/VKSdk.h>

使用框架项目安装

如果您只为iOS 8及以上版本的应用程序进行目标开发,可以使用SDK框架目标。将VK-ios-sdk.xcodeproj添加为您的项目的子项目。在Xcode中打开您的项目,然后在“通用”标签下的“嵌入二进制”部分,点击加号,并从“VK-ios-sdk”项目中选择“VKSdkFramework.framework”。导入主头文件。

#import <VKSdkFramework/VKSdk.h>

使用SDK

SDK初始化

1) 将此代码放入应用程序代理方法

//iOS 9 workflow
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    [VKSdk processOpenURL:url fromApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
    return YES;
}
//iOS 8 and lower
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    [VKSdk processOpenURL:url fromApplication:sourceApplication];
    return YES;
}

2) 使用您的APP_ID对任何代理初始化SDK。

VKSdk *sdkInstance = [VKSdk initializeWithAppId:YOUR_APP_ID];

从版本1.3开始,有两种类型的代理可用:通用代理和UI代理。您可以注册尽可能多的通用代理,但UI代理只能有一个。SDK初始化后,您应分别注册代理。

[sdkInstance registerDelegate:delegate];
[sdkInstance setUiDelegate:uiDelegate];

请在此处查看VKSdkDelegateVKSdkUIDelegate协议的完整描述:http://cocoadocs.org/docsets/VK-ios-sdk

3) 您需要检查是否存在以前的会话,因此调用异步方法wakeUpSession:completeBlock:

[VKSdk wakeUpSession:SCOPE completeBlock:^(VKAuthorizationState state, NSError *error) {
    if (state == VKAuthorizationAuthorized) {
        // Authorized and ready to go
    } else if (error) {
        // Some error happend, but you may try later
    }
}];

检查VKAuthorizationState参数。您可以得到几种状态

  • VKAuthorizationInitialized – 表示SDK已准备好工作,您可以使用+authorize:方法对用户进行授权。可能旧的会话已过期,已被清除。 这不是错误。
  • VKAuthorizationAuthorized - 表示以前的会话正常,您可以继续与用户数据一起工作。
  • VKAuthorizationError - 表示尝试检查授权时发生了某些错误。可能互联网连接质量不佳。您必须稍后再试。

用户授权

如果您还没有会话,您必须使用以下方法授权用户

[VKSdk authorize:scope];

授权后,所有通用代理都将使用以下方法调用

- (void)vkSdkAccessAuthorizationFinishedWithResult:(VKAuthorizationResult *)result;

VKAuthorizationResult包含一些初始信息:新的访问令牌对象、基本用户信息以及错误(如果授权失败)。

API请求

请求语法

以下列出了几种请求类型的一些示例。1) 简单请求。

VKRequest * audioReq = [[VKApi users] get];

2) 带参数的请求。

VKRequest * audioReq = [[VKApi audio] get:@{VK_API_OWNER_ID : @"896232"}];

3) 带有预定最大尝试次数的请求。

VKRequest * postReq = [[VKApi wall] post:@{VK_API_MESSAGE : @"Test"}]; 
postReq.attempts = 10; 
//or infinite 
//postReq.attempts = 0;

将尝试10次,直到成功或发生API错误。

4) 调用VK API任何方法的请求。

VKRequest * getWall = [VKRequest requestWithMethod:@"wall.get" andParameters:@{VK_API_OWNER_ID : @"-1"}];

5) 上传照片到用户墙的请求。

VKRequest * request = [VKApi uploadWallPhotoRequest:[UIImage imageNamed:@"my_photo"] parameters:[VKImageParameters pngImage] userId:0 groupId:0 ];

发送请求

[audioReq executeWithResultBlock:^(VKResponse * response) { 
        NSLog(@"Json result: %@", response.json); 
    } errorBlock:^(NSError * error) { 
    if (error.code != VK_API_ERROR) { 
        [error.vkError.request repeat]; 
    } else { 
        NSLog(@"VK error: %@", error); 
    } 
}];

错误处理

每个请求都可以返回等于VKSdkErrorDomain的域的NSError。SDK可以返回网络错误或内部SDK错误(例如,请求被取消)。类别`NSError+VKError`提供vkError属性,该属性描述错误事件。将错误代码与全局常量进行比较。如果它们相等,则意味着您将处理vkError属性作为API错误。否则,您应处理HTTP错误。

某些错误(例如,验证码错误,验证错误)可以被SDK处理。适当的UI代理方法将被调用以实现此目的。以下是一个验证码错误处理的示例

-(void) vkSdkNeedCaptchaEnter:(VKError*) captchaError 
{ 
    VKCaptchaViewController * vc = [VKCaptchaViewController captchaControllerWithError:captchaError]; 
    [vc presentIn:self]; 
}

批量处理请求

SDK提供了在一个调用中执行多个相关请求的功能。

1) 准备请求

VKRequest * request1 = [[VKApi audio] get]; 
request1.completeBlock = ^(VKResponse*) { ... }; 

VKRequest * request2 = [[VKApi users] get:@{VK_USER_IDS : @[@(1), @(6492), @(1708231)]}]; 
request2.completeBlock = ^(VKResponse*) { ... };

2) 将创建的请求合并为一个。

VKBatchRequest * batch = [[VKBatchRequest alloc] initWithRequests:request1, request2, nil];

3) 加载获得到的请求。

[batch executeWithResultBlock:^(NSArray *responses) { 
        NSLog(@"Responses: %@", responses); 
    } errorBlock:^(NSError *error) { 
        NSLog(@"Error: %@", error); 
}];

4) 每个方法的结果都返回到相应的completeBlock。响应数组包含请求的响应,其顺序与传递顺序相同。

使用分享对话框

分享对话框允许您创建一个用户友好的对话框,将文本和照片从您的应用程序直接分享到VK。请参阅分享对话框使用示例

VKShareDialogController * shareDialog = [VKShareDialogController new]; //1
shareDialog.text         = @"This post created using #vksdk #ios"; //2
shareDialog.vkImages     = @[@"-10889156_348122347",@"7840938_319411365",@"-60479154_333497085"]; //3
shareDialog.shareLink    = [[VKShareLink alloc] initWithTitle:@"Super puper link, but nobody knows" link:[NSURL URLWithString:@"https://vk.com/dev/ios_sdk"]]; //4
[shareDialog setCompletionHandler:^(VKShareDialogControllerResult result) {
    [self dismissViewControllerAnimated:YES completion:nil];
}]; //5
[self presentViewController:shareDialog animated:YES completion:nil]; //6

1) 按照常规创建一个对话框控制器实例。

2) 将一些文本信息附加到对话框中。请注意,用户可以更改此信息。

3) 附加先前上传到VK的图像。如果您想用户上传新图像,请使用uploadImages属性。

4) 在您的页面上附加链接

5) 设置对话框完成处理程序

6) 在视图控制器中显示对话框视图控制器

使用分享活动

VK SDK为与UIActivityViewController一起使用提供了一个特殊类——VKActivity

注意,从2.4版本开始,VK应用程序有自己的分享扩展。从版本2.5开始,它将支持特殊的URL方案来检查分享扩展是否可用。如果您有一个VK分享扩展,则应调用[VKActivity vkShareExtensionEnabled]方法来从活动列表中移除VKActivity。

以下示例说明了它的用法

NSArray *items = @[[UIImage imageNamed:@"apple"], @"Check out information about VK SDK" , [NSURL URLWithString:@"https://vk.com/dev/ios_sdk"]]; //1
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
                                                    initWithActivityItems:items
                                                    applicationActivities:@[[VKActivity new]]]; //2
[activityViewController setValue:@"VK SDK" forKey:@"subject"]; //3
[activityViewController setCompletionHandler:nil]; //4
if (VK_SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
    UIPopoverPresentationController *popover = activityViewController.popoverPresentationController;
    popover.sourceView = self.view;
    popover.sourceRect = [tableView rectForRowAtIndexPath:indexPath];
} //5
[self presentViewController:activityViewController animated:YES completion:nil]; //6

让我们看一下示例步骤

1) 准备您的分享信息 —— UIImageNSStringNSURL。这种信息可以通过VK分享。

2) 使用新的应用程序VKActivity准备UIActivityViewController

3) 为activityViewController设置一些附加属性。

4) 设置activityViewController的完成处理程序

5) 检查您是否在iOS 8以上运行。如果用户正在使用iPad,则必须在弹出视图中显示活动控制器,否则您将收到系统错误。

6) 按照常规显示活动控制器。