Closed iSpartak closed 10 years ago
Приложение с возможностью авторизации в данный момент еще не прошло проверку в appstore. Опубликуйте полный код своего контроллера. Работает ли у вас пример?
Создал совсем новый проект с одним контроллером. В контролере один UIButton который вызывает authorize
Вот код
Добавил sdk директорию (исходники) в проект. (там поддиректории sdk, SDK resources. В Target sdk.xcodeproj стоит VKSdf)
Добавил URL с моим APP ID в Info Скомпилировал Добавил libVKSdk.a в Link Binary With Library Запускаю на симуляторе
При нажатии на кнопку открывается окно Сафари (не в app) которое имеет заглавие VK SDK test app. При авторизации меня перекидывает обратно но не к себе в приложение а в ваше тестовое!
Здесь [VKSdk initializeWithDelegate:self andAppId:@"3974615"]; Должен быть идентификатор вашего приложения. Это ид тестового
Однако плохо быть бестолковым или о вреде програмирования по-ночам ,)
Спасибо большое - ступил, да!
Здравствуйте! у меня проблема с вашей sdk! все сделал по инструкции за исключением libVKSdk.a(она не находится на в вашем примере не так) нажимаю на авторизироваться, открывается окно браузера там нажимаю разрешить, возвращаюсь обратно в приложение и ни один метод делегата не срабатывает((
@kompw, какая версия библиотеки? (можно посмотреть константой VK_SDK_VERSION)
1.0.6.1 последняя! я ее качал с исходников гитхаба! не пойму почему не хочет запускаться... я уже тестовое приложение замутил но тоже самое...
Такая же беда!!
В делегате приложения прописано
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
[VKSdk processOpenURL:url fromApplication:sourceApplication];
return YES;
}
?
да)
Заходит ли туда дебагер, если поставить брейкпоинт?
а у меня другая проблема, libvksdk не находит, в ручную папку sdk копировал, теперь на [VKSdk initializeWithDelegate:self andAppId:@"мой айди"]; if ([VKSdk wakeUpSession]) { [self startWorking]; } if ([VKSdk wakeUpSession]) - возваращает всегда NO
нет! ни один из подключенных методов делегата не срабатывает libvksdk у меня тоже не подключается) она походу и не существует) ибо в проекте примере ее тоже нету!
wakeUpSession - сработает как не странно но после захода по новой на этот экран(проверка прописана у меня в viewDidLoad) суть только в том что при первом клике ничего нету да и при последующих только это срабатывает
@paparotnik это работает так:
if ([VKSdk wakeUpSession])
{
[self startWorking];
}
else {
[VKSdk authorize:SCOPE];
}
@kompw если у вас не срабатывают делегаты приложения (не SDK), вам следует задать класс делегата при инициализации приложения в main.m Пример main.m:
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([VKAppDelegate class]));
}
}
Обновил для вас пример, может быть полезно
Вы меня не совсем поняли)) не срабатывают методы делегата VKSdkDelegate и так что у меня сделано: 1) скопирована в новый проект вся папка sdk 2) подключен VKSdkDelegate 3) прописан #import "VKSdk.h" 4) зареген свой id приложения 5) в viewDidLoad [VKSdk initializeWithDelegate:self andAppId:idVk]; 5) в методе кнопки "авторизации" [VKSdk authorize:@[VK_PER_FRIENDS, VK_PER_WALL, VK_PER_AUDIO, VK_PER_PHOTOS, VK_PER_NOHTTPS]]; 6) и методы делегата
}
-(void) vkSdkDidReceiveNewToken:(VKAccessToken) newToken{ NSLog(@"xcvxfv"); NSMutableDictionary d = [NSMutableDictionary new]; [d setObject:socMasenger forKey:@"message"]; [[VKApi wall] post:d]; }
и вот ни один из методов делегата VKSdkDelegate не срабатывает, хотя мы видим страницу VK авторизируемся, даем разрешение на доступ и возвращаемся обратно... и ничего(
@kompw Хорошо. Давайте по шагам. Во-первых, скачайте последнюю версию. Там методы делегата переименованы (например, vkSdkDidReceiveNewToken -> vkSdkReceivedNewToken) Во-вторых,
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [VKSdk processOpenURL:url fromApplication:sourceApplication]; return YES; }
прописывается в делегат приложения, а не в делегат VKSdkDelegate. Это значит, что у вас будет примерно такой делегат приложения:
@implementation VKAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil] instantiateInitialViewController];
[self.window addSubview:self.window.rootViewController.view];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
[VKSdk processOpenURL:url fromApplication:sourceApplication];
return YES;
}
@end
В-третьих, удобно делать делегатом SDK какой-нибудь root view controller (как у меня в примере). Если проблемы так и не решатся, скиньте архив своего проекта мне в личку vk.com/dredd , попробуем разобраться, что не так
версия 1.0.6.3
А проблема с libsdk, которое не видно, если ставить вручную, как решается?
@kompw присылайте код архивом @paparotnik в Target Dependencies проект добавлен?
Здравствуйте. Пожалуйста, помогите разобраться...
sdk скачал на днях, собрал xcode, подключил libVKSdk.a к qt-проекту. Вызываю [VKSdk authorize:SCOPE];, открывается окно запроса доступа, нажимаю Allow, возврат в моё приложение не выполняется и не вызывается методы делегата. VK_SDK_VERSION: 1.3.13
Скорее всего, дело в моей реализации делегата для vk sdk. Коды...
static NSArray *SCOPE = nil;
static VKDelegate *vkDeleg = nil;
static VKSdk *sdkInstance = nil;
bool IosUtils::loginTthroughVKontakteSDK()
{
sdkInstance = [VKSdk initializeWithAppId:@"5291592"]; // TEST
vkDeleg = [[VKDelegate alloc] init];
[sdkInstance registerDelegate:vkDeleg];
[sdkInstance setUiDelegate:vkDeleg];
[VKSdk wakeUpSession:SCOPE completeBlock:^(VKAuthorizationState state, NSError *error) {
if (state == VKAuthorizationInitialized) {
SCOPE = @[VK_PER_FRIENDS, VK_PER_WALL];
[VKSdk authorize:SCOPE];
}
}];
}
@interface VKDelegate : NSObject <VKSdkDelegate, VKSdkUIDelegate>
@end
@implementation VKDelegate
- (void)vkSdkAccessAuthorizationFinishedWithResult:(VKAuthorizationResult *)result
{
NSLog(@">>>>>>>>>>>>>>>>>>>>> vkSdkAccessAuthorizationFinishedWithResult!");
}
- (void)vkSdkUserAuthorizationFailed {
NSLog(@">>>>>>>>>>>>>>>>>>>>> vkSdkUserAuthorizationFailed!");
}
- (void)vkSdkShouldPresentViewController:(UIViewController *)controller {
NSLog(@">>>>>>>>>>>>>>>>>>>>> vkSdkShouldPresentViewController!");
}
- (void)vkSdkNeedCaptchaEnter:(VKError *)captchaError {
NSLog(@">>>>>>>>>>>>>>>>>>>>> vkSdkNeedCaptchaEnter!");
}
@end
В app делегате openUrl прописан, но не разу не был вызван
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
Q_UNUSED(app)
NSLog(@" >>>>>>>>>>>>>>>>>>>>>>> befor OPEN URL");
bool wasHandled = [VKSdk processOpenURL:url fromApplication:sourceApplication];
if (wasHandled)
return wasHandled;
NSLog(@" >>>>>>>>>>>>>>>>>>>>>>> AFTER OPEN URL");
...
}
Единственный вызов делегата sdk происходит, если вручную перейти на своё приложение после неудачной авторизации. Вызывается метод:
- (void)vkSdkShouldPresentViewController:(UIViewController *)controller {
NSLog(@">>>>>>>>>>>>>>>>>>>>> vkSdkShouldPresentViewController!");
}
Нашел свою ошибку. Не был выполнен пункт из инструкции Setup URL-schema of Your Application.
Тем, у кого всё ещё проблемы с тем, что не вызывается метод в App Delegate: https://dev.twitter.com/cards/mobile/url-schemes https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW10 И наиболее удобно: https://developers.facebook.com/docs/ios/getting-started
Нужно настроить URL types, чтобы к приложению можно было обращаться извне и API знало, как это делать: vk{your-app-id}.
Ещё тут неплохой гайд https://github.com/west0r/SwiftyVK
Добрый день, приложение после логина , при повторном входе все равно требует подтвердить разрешение (allow app to).
(void)login { if ([VKSdk isLoggedIn]) { [self setupAppSettings];
} else { [VKSdk wakeUpSession:self.scope completeBlock:^(VKAuthorizationState state, NSError *error) { switch (state) { case VKAuthorizationAuthorized: // User already autorized, and session is correct break;
case VKAuthorizationInitialized:
[VKSdk authorize:self.scope];
break;
default:
[NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(handleTimer)
userInfo:nil
repeats:NO];
break;
}
}];
}
}
Добрый день. Пытаюсь реализовать авторизацию как в примере и по документации но ничего не выходит. Тестовое приложение с одним 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....