vkcom / vk-ios-sdk Goto Github PK
View Code? Open in Web Editor NEWiOS library for working with VK API, authorization through VK app, using VK functions
License: MIT License
iOS library for working with VK API, authorization through VK app, using VK functions
License: MIT License
Раньше было
_redirectUri = [[self class] buildAuthorizationUrl:REDIRECT_URL clientId:_appId scope:_scope revoke:revoke display:@"ios"];
теперь
_redirectUri = [[self class] buildAuthorizationUrl:REDIRECT_URL clientId:_appId scope:_scope revoke:revoke display:@"mobile"];
Был бы благодарен за возможность настраивать вид авторизации самому в вызываемом методе, например:
[VKSdk authorize:VK_PERMISSIONS revokeAccess:YES forceOAuth:NO inApp:NO display:VK_DISPLAY_IOS / VK_DISPLAY_MOBILE];
Здравствуйте, уже несколько дней не могу разобраться с непонятной причиной падения приложения при попытке выполнить запрос. Опишу подробно последовательность моих действий:
1)Создаю podFile. Делаю pod install. Библиотека успешно устанавливается. Запускаю только что созданный workspace. И сразу же у меня повляются ошибки на 2 строчки из VKSdk.h
@import Foundation;
@import UIKit;
Не долго думая, я удалил обе строки
2) Затем прописал URLTypes, в свой .h файл добавил
#import <VKSdk.h>
@interface MainViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, VKSdkDelegate>
3) Далее в основном файле пытаюсь авторизоваться и сделать небольшой запрос
[VKSdk initializeWithDelegate:self andAppId:APP_ID];
[VKSdk authorize:@[VK_PER_FRIENDS, VK_PER_WALL, VK_PER_PHOTOS, VK_PER_NOHTTPS, VK_PER_MESSAGES] revokeAccess:YES];
VKRequest * getWall = [VKRequest requestWithMethod:@"wall.get" andParameters:@{VK_API_OWNER_ID : @"1"} andHttpMethod:@"GET"];
[getWall 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);
}
}];
Но при запуске приложения, оно сразу же крашится указывая на строчку
return [[NSError alloc] initWithDomain:VKSdkErrorDomain code:originalCode userInfo:userInfo];
В NSError+VKError.h
Помогите пожалуйста разобраться.
в ios
Такая же проблема как в этой задаче #44.
Но я вроде все правильно инициализировал, но все равно не работает.
Вот я настроил URL-schema http://gyazo.com/169dc6e777f05fbc52b383079024c1e2.
Вот инициализировал SDK
[VKSdk initializeWithDelegate:self andAppId:kVKAppID];
Вот запрос на авторизацию
VK_PERMISIONS = @[VK_PER_WALL, VK_PER_OFFLINE];
[VKSdk authorize:VK_PERMISIONS revokeAccess:YES forceOAuth:YES inApp:YES display:VK_DISPLAY_IOS];
Вот делегат
- (void)vkSdkShouldPresentViewController:(UIViewController *)controller {
[viewController presentViewController:controller animated:YES completion:nil];
}
Но когда появляется webview и я в нею ввожу свои данные, нажимаю вход, потом нажимаю разрешить, контроллер скрывается и пишется DEALLOC:VKAuthorizeController, а делегат не вызывается.
Копался в библиотеке и в файле VKSdk.m нашел вот такой метод
+ (BOOL)processOpenURL:(NSURL *)passedUrl fromApplication:(NSString *)sourceApplication {
if ([sourceApplication isEqualToString:@"com.vk.odnoletkov.client"] ||
[sourceApplication isEqualToString:@"com.vk.client"] ||
([sourceApplication isEqualToString:@"com.apple.mobilesafari"] &&
[passedUrl.scheme isEqualToString:[NSString stringWithFormat:@"vk%@", vkSdkInstance->_currentAppId]])
)
return [self processOpenURL:passedUrl];
return NO;
}
Я так понимаю как раз проблема тут, потому что у меня данный метод, всегда возвращает NO.
Я попробовал закомментировать условие if, все заработало :)
Привет
Хочу распарсить стену группы, новости, видео, репосты, их авторов и интермацию о них;
У меня вот такая ошибка, понимаю что ее не избежать и есть какие-то ограничение на запросы, интересно что это за ограниечение? И, например, если у нас есть стена группы Вк и мне нужно получить ее информацию в приложение, то каким методом лучше делать запросы?
(Например, если есть репост в добавок запрошиваю инфо и картинки автора репоста, если видео - запрошиваю доп инфо, если юзер - доп инфо). В итоге эта ошибка, и как я понимаю, не все данные получаю.
Error: Error Domain=VKSdkErrorDomain Code=-101 "Too many requests per second" UserInfo=0xbfcc140 {NSLocalizedDescription=Too many requests per second, VkErrorDescriptionKey=<VKError: 0xbfdc660;>}
Раньше ошибку не выдавало. Может дело в новой версии?
DLog(@"%@", self.token.userId);
VKRequest *getInfo = [VKRequest requestWithMethod:@"users.get" andParameters:@{@"uids" : self.token.userId, @"fields" : @"photo_100"} andHttpMethod:@"GET"];
[getInfo executeWithResultBlock:^(VKResponse *response) {
//
} errorBlock:^(NSError *error) {
if (error.code != VK_API_ERROR)
{
[error.vkError.request repeat];
}
else
{
DLog(@"VK error: %@", error);
}
}];
2014-04-16 00:25:06.871 MusicPro[3269:60b] -[VKManager requestInfo] [Line 88] 143285699
2014-04-16 00:25:07.484 MusicPro[3269:60b] __24-[VKManager requestInfo]_block_invoke323 [Line 137] VK error: Error Domain=VKSdkErrorDomain Code=-101 "Invalid user id" UserInfo=0x14ee7dd0 {NSLocalizedDescription=Invalid user id, VkErrorDescriptionKey=<VKError: 0x14e9af50;>}
К сожалению, у Flash-разработчиков сейчас нет возможности интегрировать мобильные приложения с нативными библиотеками, такими как VK SDK, хотя это было бы очень полезно! Единственная возможность использовать VK SDK - использовать расширения для нативных библиотек (ANE), выступающих прослойкой между AIR и библиотекой. ANE пишется на том же языке, что и сама библиотека. Многие социальные платформы уже имеют такие расширения (например Facebook SDK), поэтому сообщество флешеров оценило бы появление ANE для IOS и Android версий VK SDK!
Что мешает возвращать обычный, правильно сформированный NSError? Это бы сильно упростило его обработку.
Приветствую!
Был у меня репорт следующего рода: AndrewShmig/Vkontakte-iOS-SDK-LV#87
Вопрос: каким образом на локальном компьютере с использованием симулятора можно оттестировать получение страницы (и её обработку) security check?
Благодарю.
The s.homepage value is wrong.
На устройстве установлено приложение VKapp, пользователь авторизирован.
Вызываю
[VKSdk initializeWithDelegate:self andAppId:@"*******"];
[VKSdk authorize:@[VK_PER_FRIENDS, VK_PER_OFFLINE, VK_PER_NOTIFY] revokeAccess:YES];
всегда открывается Safari.
Добавьте пожалуйста пример использования VK_API_LANG и VK_API_SORT. Я использую вот так, но отчего то друзья возвращаются на английском языке, а сортировка не меняется.
VKRequest *friendsRequest = [VKRequest requestWithMethod:@"friends.get" andParameters:@{ VK_API_FIELDS : @"uid,first_name,last_name,sex,bdate,city,country,photo_50,photo_100,photo_200_orig,photo_200,photo_400_orig,photo_max,photo_max_orig,online,online_mobile,lists,domain,has_mobile,contacts,connections,site,education,universities,schools,can_post,can_see_all_posts,can_see_audio,can_write_private_message,status,last_seen,common_count,relation,relatives,counters", VK_API_LANG : @"ru", VK_API_SORT : @"name"} andHttpMethod:@"GET" classOfModel:[VKUsersArray class]];
Я новичек в разработке iOS
непонятен след. момент как
добавить в NSDictionary ответ сервера после выполнеия запроса и распарсить его без сторонних библиотек
VKRequest * getUserInfo = [VKRequest requestWithMethod:@"users.get" andParameters:@{VK_API_FIELDS : @"uid, first_name, last_name, photo_100"} andHttpMethod:@"GET"];
[getUserInfo 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);
}
}];
и еще хорошо бы добавит метод аунтефикации - если прошла авторизация возвратить YES иначе NO
Извиняюсь может чего не досмотрел я еще не искушен и не большого опыта в разработке для iOS. Спасибо.
Собственно, кроме голого объявления в протоколе ничего и нету. Из делегатных методов он один такой.
А главное неясно как по человечески проверять, что токен протух. Как вариант, можно вместе с токеном сохранять и время, когда он закончится, но делать это вне сдк - костыльно.
Last Exception Backtrace:
0 CoreFoundation 0x2f845e7e exceptionPreprocess + 126
1 libobjc.A.dylib 0x39ba26c2 objc_exception_throw + 34
2 CoreFoundation 0x2f8496be +[NSObject(NSObject) doesNotRecognizeSelector:] + 198
3 CoreFoundation 0x2f8480aa __forwarding + 702
4 CoreFoundation 0x2f796dc4 forwarding_prep_0_ + 20
5 LoudSound 0x000a090a __31-[VKRequest executionOperation]_block_invoke (VKRequest.m:170)
6 LoudSound 0x0008cac0 __57-[VKHTTPOperation setCompletionBlockWithSuccess:failure:]_block_invoke443 (VKHTTPOperation.m:583)
7 libdispatch.dylib 0x3a0870be _dispatch_call_block_and_release + 6
8 libdispatch.dylib 0x3a0870aa _dispatch_client_callout + 18
9 libdispatch.dylib 0x3a0899a4 _dispatch_main_queue_callback_4CF + 264
Валится с версией от 31 января. Раньше все работало. Код как в примере. Причем валится не всегда но в 99%. Иногда работает без проблем.
И еще - больше для понимания. Где прочитать про цикл жизни авторизации. На сколько ключ выдается? К примеру в том-же Твитере мне нужно получить разрешение от пользователя только один раз. В vk api диалог на разрешение доступа выскакивает с завидной периодичностью опять и опять.
Не вижу Апи метода чтобы проверить в закладках ли группа/паблик, так же не виду как ее добавить и удалить из закладок
Авторизуюсь в приложении.
[VKSdk authorize:@[@"friends", @"photos", @"audio", @"wall", @"offline", @"groups"] revokeAccess:YES forceOAuth:NO inApp:NO display:VK_DISPLAY_IOS];
Проверяю токен
DLog(@"%@", self.token.accessToken);
Токен имеется
Отправляю запрос
VKRequest *getInfo = [VKRequest requestWithMethod:@"audio.getRecommendations" andParameters:@{VK_API_USER_ID : self.token.userId, @"shuffle" : @"0", VK_API_COUNT : @"1", VK_API_OFFSET : @"0"} andHttpMethod:@"GET"];
Приходит нормальный ответ.
Выходя из приложения токен записываю в Defaults
[newToken saveTokenToDefaults:@"access_token"];
Захожу в приложение и из Defaults беру токен
[self setToken:[VKAccessToken tokenFromDefaults:@"access_token"]];
Проверяю токен
DLog(@"%@", self.token.accessToken);
Токен имеется
Отправляю запрос
VKRequest *getInfo = [VKRequest requestWithMethod:@"audio.getRecommendations" andParameters:@{VK_API_USER_ID : self.token.userId, @"shuffle" : @"0", VK_API_COUNT : @"1", VK_API_OFFSET : @"0"} andHttpMethod:@"GET"];
Получаю ошибку
VK error: Error Domain=VKSdkErrorDomain Code=-101 "User authorization failed: no access_token passed." UserInfo=0x14eb52d0 {NSLocalizedDescription=User authorization failed: no access_token passed., VkErrorDescriptionKey=<VKError: 0x14e6b3c0;>}
Какой вид имеет ссылка на проигрывание видео?
Подскажите, как можно работать с текущим пользователем, например получить id, или любой другой параметр?
Заранее, спасибо!
Пишу в pods - "pod 'VK-ios-sdk'", инсталю - в проекте Pods в папке pods создается папка VK-ios-sdk, в которой только Support Files. Ни одного source файла нет.
Cocoapods самая последняя версия, все остальные поды подтягиваются нормально. Пробовал на нескольких проектах.
Такое чувство что все в целом работает правильно, но запись почему-то не публикуется на стену.
В ответе на запрос приходят ссылки на загруженные изображения:
photo_130 = https://pp.vk.me/c614625/v614625514/49ce/UlDsCRPMWpg.jpg;
photo_604 = https://pp.vk.me/c614625/v614625514/49cf/1BRmxlE_gN0.jpg;
photo_75 = https://pp.vk.me/c614625/v614625514/49cd/jHphmn2QnbY.jpg;
И остальные параметры вроде верные. Но на стене ничего не появляется.
Запрос использую стандартный из примера:
VKRequest *request = [VKApi uploadWallPhotoRequest:image parameters:[VKImageParameters pngImage] userId:0 groupId:0];
Еще хотелось бы в запросе передавать дополнительные параметры. Например текст. Чтобы постить на стену не голую картинку, но с текстом.
В классе "VKUploadWallPhotoRequest" вроде бы легко можно добавить параметр текста.
Здравствуйте, мне необходимо вписать в ответ response.json новую пару ключ-значение. При попытке установить parsemodel=false и самому получить ответ вываливается ошибка unrecognized selector sent to instance 0xb16a880.
VKRequest * wall = [VKRequest requestWithMethod:@"wall.get" andParameters:@{VK_API_OWNER_DOMAIN : @"tomcruise"} andHttpMethod:@"GET"];
wall.parseModel=false;
[wall executeWithResultBlock:^(VKResponse * response) {
arrayVK=[NSJSONSerialization JSONObjectWithData:response.json options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:nil];
} errorBlock:^(NSError * error) {
if (error.code != VK_API_ERROR) {
[error.vkError.request repeat];
}
else {
NSLog(@"VK error: %@", error);
}
}];
Как можно решить эту проблему?
Почему-то только что полученный токен в методе:
accessToken.expiresIn
возвращает 0. Это нормально?
И хотелось бы иметь метод
accessToken.isExpired
чтобы проверять, не истек ли он в данный конкретный момент.
Хотя хотел это реализовать обычным сравнением
if (accessToken.expiresIn <= 0)
но, как уже писал выше, новый токен возвращает 0...
In VKAccessToken.m
you declare static NSString *const TOKEN_KEY = @"VK is the best";
, but this is not the best and addition useless.
Because If someone uses cocoapod, it hasn't access to source and can't define own value without conflict when updating pods(or pods isn't under vcs). So that key is unavailable to modified without pain. It means every your user have 'VK is the best' as a key as a result encryption is useless.
In example project you write static NSString *const TOKEN_KEY = @"my_application_access_token";
in VKStartScreen.h
but it's pointlessly and doesn't override value of TOKEN_KEY.
In conclusion, if you want to give a option for security, you must pull TOKEN_KEY from constants of the project. Now encryption is useless and only eats cpu ticks.
Обновление токена происходит автоматически в SDK? Или его нужно постоянно запрашивать самому?
Делаю запрос
VKRequest *requestGroup = [VKRequest requestWithMethod:@"likes.add" andParameters:@{ @"type" : @"post", @"owner_id" : GROUP_ID, @"item_id" : self.currentWallpost.guid, @"access_key" : [VKSdk getAccessToken].accessToken} andHttpMethod:@"GET"];
GROUP_ID 39765355
self.currentWallpost.guid 39557
access_key 9e7830d0502f34b75398f9e9379865633475e4f325caeb3a9e59819a285a4d15c93106775cab0837cc9a9
Ответ Error: Error Domain=VKSdkErrorDomain Code=-101 "One of the parameters specified was missing or invalid: object not found" UserInfo=0xca66870 {NSLocalizedDescription=One of the parameters specified was missing or invalid: object not found, VkErrorDescriptionKey=<VKError: 0xca6b920;>
Как лайкнуть пост?
Создал синглтон класс VKManager
@interface VKManager : NSObject (VKSdkDelegate)
Сделал его делегатом VKSdk.
По нажатию на кнопку вызываю авторизацию. Очень разные типы авторизации я вызывал.
[VKSdk authorize:@[@"friends", @"photos", @"audio", @"wall", @"offline", @"groups"] revokeAccess:YES forceOAuth:NO inApp:YES];
В делегате вызывается vkSdkShouldPresentViewController
Показывается контролер авторизации. Если жму "отмена" на навигационном баре, то срабатывает vkSdkUserDeniedAccess и пишется лог DEALLOC:VKAuthorizeController
Но если я жму "разрешить" или "отмена" на самой веб страничке, то контролер просто сворачивается. Никаких методов в делегате не вызывается. Пишется лог DEALLOC:VKAuthorizeController
Я наверное что-то упустил? Почему в делегате не срабатывают методы об удачной или неудачной авторизации?
Делаю запрос
(void)requestVKGroupWithId:(NSString *)groupId
{
VKRequest *requestGroup = [VKRequest requestWithMethod:@"groups.getById" andParameters:@{ VK_API_GROUP_ID : groupId, VK_API_FIELDS : @"description, is_member, members_count, status, contacts"} andHttpMethod:@"GET"];
[requestGroup executeWithResultBlock: ^(VKResponse *response) {
NSArray *responseArray = [NSArray arrayWithArray:response.json];
NSLog(@"%@", responseArray);
[DataManager saveGroup:responseArray[0] WithParams:nil];
} errorBlock: ^(NSError *error) {
//DDLogError(@"Error: %@", error);
}];
}
Не приходят все поля
{
description = "";
id = 39765355;
"is_closed" = 0;
name = "Men's Group";
"photo_100" = "https://pp.vk.me/c605529/v605529282/3c94/EVf7zZRbpE0.jpg";
"photo_200" = "https://pp.vk.me/c605529/v605529282/3c91/0tz4YidTpQE.jpg";
"photo_50" = "https://pp.vk.me/c605529/v605529282/3c95/s2fWxeFfMOs.jpg";
"screen_name" = lmensgroupl;
type = page;
}
Random mixing direct access to ivars and properties is bad practise with side effects.
Создал новый проект, подключил sdk. Инициализировал с помощью [VKSdk initializeWithDelegate:self andAppId:VKAPP_ID] в
Затем вызываю авторизацию с помощью метода [VKSdk authorize:scope]; Меня кидает на страницу Safari где я ввожу логин и пароль, затем разрешаю доступ приложению. После этого меня перекидывает опять в приложение, но метод vkSdkDidReceiveNewToken не вызывается. В том случае если отменить авторизацию то опять перекидывает в приложение, но ни один из методов не вызывается.
Добрый день. Пытаюсь реализовать авторизацию как в примере и по документации но ничего не выходит. Тестовое приложение с одним UIViewController, при вызове
[VKSdk authorize:@[VK_PER_FRIENDS, VK_PER_WALL, VK_PER_AUDIO, VK_PER_PHOTOS, VK_PER_NOHTTPS]];
открывается Safari и пытается пойти на страницу с авторизацие oAuth. Периодически ругается на Page not found, когда-же она появляется то после логина при нажатии на кнопку доверять, также ругается на инвалидный линк.
Запускается на iPhone 5 with iOS 7 на котором также установленно последнее VK app. Но authorize его не видет и открывает сафари. По документации же должно быть новое UIWebView или VK app....
При "плохом" интернете есть смысл установить таймаут для реквеста. Как это можно сделать? При очень плохом интернете реквест не выпадает по таймауту (как будет если вообще нет интернета) а приводит к крешу программы. Я уже писал про это, но тогда не знал как воспроизвести.
2014-03-20 21:33:10.925 LoudSound[479:60b] -[NSURLError copyWithVkError:]: unrecognized selector sent to instance 0x16e17610
2014-03-20 21:33:10.928 LoudSound[479:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURLError copyWithVkError:]: unrecognized selector sent to instance 0x16e17610'
*** First throw call stack:
(0x2e521f03 0x38cb6ce7 0x2e525837 0x2e52412f 0x2e4730d8 0x156999 0x11521d 0x3919fd53 0x3919fd3f 0x391a26c3 0x2e4ec679 0x2e4eaf45 0x2e4557a9 0x2e45558b 0x333c26d3 0x30db4891 0x126d05 0x391b4ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
From VK iOS SDK:
VKRequest * getWall = [VKRequest requestWithMethod:@"wall.get" andParameters:@{VK_API_OWNER_ID : @"-1"} andHttpMethod:@"GET"];
From Apple Coding Guidelines for Cocoa:
Another example:
[VKSdk authorize:scope revokeAccess:YES];
etc.
Использую этот запрос
VKRequest *request = [VKRequest requestWithMethod:@"video.get" andParameters:@{ VK_API_OWNER_ID :[NSNumber numberWithInt:[ownerId integerValue]], @"videos" : [NSString stringWithFormat:@"%@_%@", ownerId, videoId], @"width" : @320, @"count" : @1, @"extended" : @1 } andHttpMethod:@"GET"];
[request executeWithResultBlock: ^(VKResponse *response) {
if (response.json[@"items"])
{
NSArray *responseArray = [NSArray arrayWithArray:response.json[@"items"]];
if (responseArray.count > 0)
{
NSLog(@"%@",response.json);
Хочу получить ссылку на файл, с сайта Вк ответ выгрядит так:
response: {
count: 1,
items: [{
id: 167281563,
owner_id: 3907393,
title: 'This is what the Internet was made for 2012 Edition [HD]',
duration: 743,
description: '• Подписывайся на iFeed — vk.com/iFeed
• А так же Винегрет — vk.com/aVinegret',
date: 1389588320,
views: 1,
comments: 0,
photo_130: 'http://cs534310.vk.me/u176608917/video/s_8fdee2da.jpg',
photo_320: 'http://cs534310.vk.me/u176608917/video/l_3143dadb.jpg',
files: {
mp4_240: 'http://cs534310v4.vk.me/u176608917/videos/a0b4f66b34.240.mp4?extra=AIjTu4r9tzLoB1oiaEkTlbin0zCXvH67nALJ0cG0OuEuBa6spwU9oJSEbgIOogW6I95xzrsXPky2EVkWU8k8Rs_mrcYBVw',
.......
Мне не приходит Словарик files:
Почему?
Хотелось бы иметь возможность осуществлять server-side запросы к VK API после авторизации пользователя через мобильное приложение.
Но access_token, полученный в мобильном приложении, не может использоваться на сервере.
Поэтому необходима возможность получения code в мобильном приложении (для последующего его обмена на access_token на сервере).
Спасибо!
Всем привет. Меня очень интересует возможность запроса а auth_token, а code, потому как мы пробрасываем запросы через сервер после авторизации, и дальнейший токен после запроса кода на клиенте уже получает сервер.
Посему у меня вопрос, есть ли в сдк возможность запросить не токен а код?
Connections и contacts не парсятся. Они приходят в json, но если создавать VKUser так
VKUser * user = ((VKUsersArray*)response.parsedModel).firstObject;
или сразу массив друзей, то поля пустые.
Не смотря на название forceLogout не разлогинивает пользователя. vkSdkInstance->_accessToken после этого вызова сохраняется. Запросы продолжают выполняться. Единственный метод, который может установить токен в nil: VKSdk:+setAccessTokenError.
Сейчас использую следующий костыль:
[VKSdk forceLogout];
[VKSdk setAccessTokenError:[VKError errorWithCode:VK_API_CANCELED]];
NSString* defaultsKey = @"VK_ACCESS_TOKEN_DEFAULTS_KEY_DONT_TOUCH_THIS_PLEASE";
[[NSUserDefaults standardUserDefaults] removeObjectForKey:defaultsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
Как корректно сбросить сессию пользователя?
Я в программировании новичок, потому если ошибаюсь,то прошу прощения.Но этого метода, который указан в примерах к тому же, нет в методах класса.
В примерах написано так:
VKRequest * request1 = [[VKApi audio] get]; ... и в блок приходит response...
Если написать [[VKApi users] get]; напр, то работает, но вот список аналогичных методов в VKApi:
Предлагаю к методам
[VKAccessToken saveTokenToDefaults:(NSString *)];
[VKAccessToken saveTokenToFile:(NSString *)];
[VKAccessToken tokenFromDefaults:(NSString *)];
[VKAccessToken tokenFromFile:(NSString *)];
добавить методы
[VKAccessToken removeTokenFromDefaults:(NSString *)];
[VKAccessToken removeTokenFromFile:(NSString *)];
и для упрощения ввести методы без указания ключа
[VKAccessToken saveTokenToDefaults];
[VKAccessToken saveTokenToFile];
[VKAccessToken tokenFromDefaults];
[VKAccessToken tokenFromFile];
[VKAccessToken removeTokenFromDefaults];
[VKAccessToken removeTokenFromFile];
Если авторизация происходит не в сафари, а внутри приложения. То даже если я в данный момент не залогинен в сафари, то внутри приложения я все равно авторизирован.
Так вот каким образом мне сменить пользователя?
И второй вопрос, можно ли проверить авторизирован я в данный момент или нет, не сохраняя и не загружая AccessToken вручную?
Можно например допилить под себя вот эту репу: https://github.com/romaonthego/REComposeViewController
там только на айпаде во всю ширину растягивается
У фейсбуков например из коробки есть:
https://developers.facebook.com/docs/ios/ui-controls#share-link
Хочу осознать принцип обработки execute-ов
Например такая функция:
return [API.wall.get({"offset":0,"count":1})@.attachments,API.wall.get({"offset":1,"count":1})@.attachments];
Для отправки запроса использую
executeWithResultBlock:^(VKResponse *response)
если делать как в примерах и пытаться достать данные из
response.json
то в один прекрасный момент натыкаюсь на
{
count = "<нулл>";
items = "<нулл>";
}
И происходит это по тому, что в действительности в ответе нет ни items, ни count.
Очень хочется из response достать NSData и обработать самому, но нет такого...
Научите как быть?
При авторизации вылетела такая ошибка.
"User authorization failed: access_token was given to another ip address."
Но в делегате никакой метод не вызвался. Я так понимаю должен бы вызываться метод vkSdkUserDeniedAccess ?
Пока еще не силен в iOS разработке и столкнулся с небольшой проблемой: хочу сделать запрос на wall.get и взять текст допустим со 5 по счету новости.
VKRequest * getWall = [VKRequest requestWithMethod:@"wall.get" andParameters:@{VK_API_OWNER_ID : @"1"} andHttpMethod:@"GET"];
[getWall executeWithResultBlock:^(VKResponse * response) {
NSLog(@"%@",response.json[5][@"text"]);//ошибка
} errorBlock:^(NSError * error) {
if (error.code != VK_API_ERROR) {
[error.vkError.request repeat];
}
else {
NSLog(@"VK error: %@", error);
}
}];
В месте,помеченном комментарием вываливается эксепшн [__NSCFDictionary objectAtIndexedSubscript:]: unrecognized selector sent to instance 0xa5911c0
Обработка ответов на запрос выполняется в очереди главного потока, что делает невозможным стандартную практику, аля:
VKRequest *request = ...;
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[request executeWithResultBlock:^(VKResponse *response) {
...
dispatch_semaphore_signal(sema);
} errorBlock: ... ];
dispatch_semaphore_wait(sema);
Стоит отметить, что RestKit подобным минусом не обладает.
Понятное дело, что ставить в блок главный поток - не лучшая практика, но иногда она бывает оправданна.
Pull request принимаются?
почему? если авторизировался посылаю сообщение презентовать новый Контроллер, презентую без авторизации - не приходят ответы на запросы
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.