суббота, 14 сентября 2013 г.

ВКонтакте API: Авторизация при помощи Qt

Если вы решили создать приложение ВКонтакте для мобильного телефона или компьютера с использованием Qt, то эта статья для вас.

Для начала, чтобы быть в курсе, что же нам потребуется проделать для успешной авторизации, я рекомендую изучить официальную документацию http://vk.com/dev/auth_mobile, в ней все достаточно подробно описано.

После этого можете смело переходить под кат:

Готовый класс QvkAuthView а так же пример программы, который его использует можно загрузить из svn:

svn checkout https://qttroll.googlecode.com/svn/trunk/qtvkauth qtvkauth

Открытие страницы авторизации делается следующим образом:


void QvkAuthView::openAuthPage()
{
    QUrl url("http://api.vkontakte.ru/oauth/authorize");
    url.addQueryItem("client_id", QString::number(m_appId)); // ваш идентификатор приложения
    url.addQueryItem("scope", QString::number(m_requiredPermissions)); // разрешения, которые требует 
                                                     // ваше приложение (см. QvkAuthView::Permission)
    url.addQueryItem("display", "mobile");
    url.addQueryItem("v", "5.0");
    url.addQueryItem("redirect_uri", "http://api.vkontakte.ru/blank.html");
    url.addQueryItem("response_type", "token");
    load(url);
}

Для того, чтобы отловить событие успешной авторизации или же ошибки необходимо обрабатывать сигнал QWebView::urlChanged():


void QvkAuthView::on_urlChanged(const QUrl &newUrl)
{
    QUrl url = newUrl.toString().replace("#","?");

    if (url.hasQueryItem("error"))
    {
        emit authFail(url.queryItemValue("error"), url.queryItemValue("error_description"));
        return;
    }

    if (url.hasQueryItem("access_token"))
    {
        emit authSuccess(url.queryItemValue("access_token"), url.queryItemValue("expires_in").toInt(),
                url.queryItemValue("user_id").toInt());
        return;
    }
}

Здесь следует уделить особое внимание первой строчке где происходит замена '#' на '?'. Т.к. от сервера нам приходит редирект с решеткой вместо знака вопроса.

Далее нам остается обработать сигналы успешной авторизации authSuccess() и ее краха authFail().

Комментариев нет:

Отправить комментарий