Android приложение

Основная разработка ведется на github, поэтому документация отражает общий принцип, а детали лучше смотреть в примере на github ok-android-sdk/example

В приложении используется Android SDK.

У разработчика должно быть приложение с платформой Android и ключи для него:

  • APP_ID - id приложения
  • APP_PUBLIC_KEY - публичный ключ приложения

У приложения в redirect_uri должно быть добавлено okauth://okXXXXXX, где XXXXXX - APP_ID

Подключим SDK через gradle

compile 'ru.ok:odnoklassniki-android-sdk:2.0.3'

Т.к. для API используется интернет, то добавляем

<uses-permission android:name="android.permission.INTERNET"/>

Для авторизации необходимо добавить OkAuthActivity, заменив XXXXXX на id своего приложения

 <activity
    android:name="ru.ok.android.sdk.OkAuthActivity"
    android:configChanges="orientation|screenSize"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>

        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>

        <data
            android:host="okXXXXXX"
            android:scheme="okauth"/>
    </intent-filter>
</activity>

Также если в SDK используются виджет постинга или виджет инвайта/садджеста, их также надо добавить

<activity android:name="ru.ok.android.sdk.OkPostingActivity"/>
<activity android:name="ru.ok.android.sdk.OkAppInviteActivity"/>
<activity android:name="ru.ok.android.sdk.OkAppSuggestActivity"/>

Для создания инстанса Odnoklassniki необходимо добавить

Odnoklassniki odnoklassniki = Odnoklassniki.createInstance(this, APP_ID, APP_KEY);

Повесим на кнопку вызов OAuth авторизации:

findViewById(R.id.button_login).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(final View view) {
        odnoklassniki.requestAuthorization(listener, REDIRECT_URL, OkScope.VALUABLE_ACCESS, OkScope.LONG_ACCESS_TOKEN);
    }
});

Получив сессию пользователя можем сделать вызов к API, например, через AsyncTask (поход в интернет не должен быть в UI потоке), чтобы получить информацию о пользователе

protected final class GetCurrentUserTask extends AsyncTask<Void, Void, String> {
    @Override
    protected String doInBackground(final Void... params) {
        try {
            return odnoklassniki.request("users.getCurrentUser", null, "get");
        } catch (Exception exc) {
            Log.e("Odnoklassniki", "Failed to get current user info", exc);
        }
        return null;
    }

    @Override
    protected void onPostExecute(final String result) {
        if (result != null) {
            Toast.makeText(MainActivity.this, "Get current user result: " + result, Toast.LENGTH_SHORT).show();
        }
    }
}

После этого покажем пользователю кнопку, через которую он может сделать себе публикацию

findViewById(R.id.button_post).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        odnoklassniki.performPosting("{\"media\":[{\"type\":\"text\",\"text\":\"hello world!\"}]}",
                false, null, listener);
    }
});