测试测试版 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
Released最后发布 | 2015年11月 |
由 Peter Nikolaev 维护。
用于处理 VK API、通过 VK 应用授权以及使用 VK 功能的库。支持从 6.0 版本的 iOS
要主要为使用 VK SDK,您需要创建一个新的 VK 应用程序,在这里选择独立应用程序类型 [这里]。选择一个标题并通过短信确认操作,您将被重定向到应用程序设置页面。您将需要您的应用程序 ID(在文档中称为 API_ID)。填写 iOS 字段的应用程序包。
要使用通过 VK 应用授权,您需要设置应用程序的 URLSchema,它看起来像 vk+APP_ID(例如,vk1234567)。
有关如何实现您自己的 URL Scheme 的说明,请参阅此处,还有一个不错的 Twitter 教程
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>
将 VKSdk.framework
和 VKSdkResources.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>
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];
请在此处查看VKSdkDelegate
和VKSdkUIDelegate
协议的完整描述: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参数。您可以得到几种状态
+authorize:
方法对用户进行授权。可能旧的会话已过期,已被清除。 这不是错误。如果您还没有会话,您必须使用以下方法授权用户
[VKSdk authorize:scope];
授权后,所有通用代理都将使用以下方法调用
- (void)vkSdkAccessAuthorizationFinishedWithResult:(VKAuthorizationResult *)result;
VKAuthorizationResult
包含一些初始信息:新的访问令牌对象、基本用户信息以及错误(如果授权失败)。
以下列出了几种请求类型的一些示例。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属性,该属性描述错误事件。将错误代码与全局常量
某些错误(例如,验证码错误,验证错误)可以被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) 准备您的分享信息 —— UIImage
、NSString
和NSURL
。这种信息可以通过VK分享。
2) 使用新的应用程序VKActivity
准备UIActivityViewController
。
3) 为activityViewController
设置一些附加属性。
4) 设置activityViewController
的完成处理程序
5) 检查您是否在iOS 8以上运行。如果用户正在使用iPad,则必须在弹出视图中显示活动控制器,否则您将收到系统错误。
6) 按照常规显示活动控制器。