Unity SDK

Репозиторий на Github: ok-unity3d-sdk

Unity SDK позволяет Android и iOS приложениям взаимодействовать с Одноклассниками.

Перед подключением SDK необходимо проверить в настройках приложения:

  • нужная платформа добавлена в настройках приложения (Android и/или iOS)
  • включена клиентская авторизация
  • добавлен redirect_uri вида okauth://ok{APP_ID}
  • приложение обладает нужными для функционирования правами, рекомендуется VALUABLE_ACCESS и LONG_ACCESS_TOKEN

Установка

  1. В зависимости от используемой версии Unity (4 или 5), вы должны скопировать нужные DLL- и мета-файлы и удалить остальные (odnoklassniki_unity4.dll, odnoklassniki_unity4.dll.meta / odnoklassiki_unity5.dll, odnoklassniki_unity5.dll.meta из Assets/Plugins). Убедитесь, что GUID данной DLL остается неизменным, так как если он был изменен, то могут сломаться включенные префабы. Обратите внимание, что это должно быть сделано до открытия проекта в Unity.
  2. Заполните параметры приложения в OdnoklassnikiSettings.asset
  3. Добавьте следующие строки в android.manifest
  • через тег application
<activity android:name="ru.odnoklassniki.unity.OKAndroidPlugin"
    android:label="@string/app_name"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    <intent-filter>
        <data android:scheme="okauth" android:host="{APP_ID}" />
    </intent-filter>
    <meta-data android:name="android.app.lib_name" android:value="unity" />
    <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>
<activity android:name="ru.odnoklassniki.unity.webview.OKWVActivity"
    android:label="@string/app_name"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    <meta-data android:name="android.app.lib_name" android:value="unity" />
    <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>
  • через тег manifest
<activity android:name="ru.odnoklassniki.unity.auth.AppAuthorization"/>

Инициализация

OK.Init(success =>
{
    if (success) {
        //Proceed to authorization
    }
});

Авторизация

OK.Auth(success =>
{
    if (success) {
        //Authorization successful, you can now use Odnoklassniki API
    }
});

Есть 2 варианта авторизации через Одноклассники: через установленное приложение (Android / iOS) или через WebView.

После авторизации у приложения будет токен с ограниченным временем жизни (30 минут без LONG_ACCESS_TOKEN)

OK.AccessToken

Если авторизация происходила через официальное приложения Одноклассников, то текущее приложение получит также refresh_token, который позволяет получать новые access_token до 30 дней.

OK.IsRefreshTokenValid

Получить действительный access_token можно при помощи кода:

if (OK.isInitialized && OK.AccessTokenExpiresAt < DateTime.Now) {
    if (OK.IsRefreshTokenValid) {
        OK.RefreshAccessToken(success =>
        {
            //Token refreshed
        });
    } else {
        OK.RefreshOAuth(success => {
            //Token refreshed
        }
    }
}

Использование виджетов

Виджет приглашения (OpenInviteDialog)

OK.OpenInviteDialog(response => {
    //Will be called after Invite API call
}, "Invite Message");

Виджет рекомендации (OpenSuggestDialog)

OK.OpenSuggestDialog(response => {
    //Will be called after Suggest API call
}, "Suggest Message");

Виджет загрузки фото (OpenPhotoDialog)

OK.OpenPhotoDialog(response => {
    //Will be called after Upload API call
}, texture, "Description");

Виджет публикации (OpenPublishDialog)

OK.OpenPublishDialog(response => {
    //Will be called after Publish API call
    }, new List<OKMedia>()
    {
        OKMedia.Photo(texture),
        OKMedia.Text("Description")
    });

Обработка ошибок

response => {
    if (response.Object != null && response.Object.ContainsKey("error_code")) {
        string errorCode = response.Object["error_code"].ToString();
        string errorMessage = response.Object["error_msg"].ToString();
        //Debug.Log or show alert?
    } else {
        //Success
    }
}