odnoklassniki / ok-android-sdk Goto Github PK
View Code? Open in Web Editor NEWAndroid SDK & samples for native apps integrated with OK.RU
License: Apache License 2.0
Android SDK & samples for native apps integrated with OK.RU
License: Apache License 2.0
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Failed to transform file 'odnoklassniki-android-sdk-2.1.5.aar' to match attributes {artifactType=processed-aar} using transform JetifyTransform
use OKListener instead btw not good to show not working example D
Доброе время суток!
Использую compile 'ru.ok:odnoklassniki-android-sdk:2.0.3'
.
По порядку:
Ошибка в WEB системе добавления приложения: Создаю приложение. Заполняю все поля (нету отметок про обязательные поля). Не заполнил 50x50. Нажимаю Save. Ни одной ошибки о том, что не заполнил поле. Просто прокручивается страница вверх и ВСЕ. При повторном нажатии вылетает на главную страницу. Много ошибок в Firebug от Firefox.
return odnoklassniki.request("users.getCurrentUser", null, null);
ошибка
Error:(137, 37) error: reference to request is ambiguous both method request(String,Map<String,String>,String) in Odnoklassniki and method request(String,Map<String,String>,EnumSet<OkRequestMode>) in Odnoklassniki match
odnoklassniki = Odnoklassniki.createInstance(this, APP_ID, APP_KEY);
odnoklassniki.checkValidTokens(new OkListener() {
@Override
public void onSuccess(JSONObject json) {
showForm();
}
@Override
public void onError(String error) {
Log.d(TAG, "onError:" + error);
Toast.makeText(OKActivity.this, String.format("%s: %s", "Error", error), Toast.LENGTH_LONG).show();
}
});
Пробую получить инфу с помощью
return odnoklassniki.request("users.getCurrentUser", null, "GET");
odnoklassniki.request("users.getCurrentUser", null, "GET");
пишет deprecated? Где посмотреть как по новому вызывать rest-методы?При попытке авторизоваться получаю следующую ошибку: unsupported_response_type_for_this_app. Поиск этой ошибки в интернете не дал ничего. Ошибка возникает после ввода правильных логина и пароля как результат вызова вот этого метода:
mOdnoklassniki.requestAuthorization(prepareOkListener(), REDIRECT_URL, OkAuthType.ANY, OkScope.VALUABLE_ACCESS);
При первом вызове requestAuthorization появляется окно логина, если ввести неправильные логин-пароль дает ошибку, если ввести правильные то окно логина закрывается и OKListener возвращает unsupported_response_type_for_this_app.
При последующих вызовах checkValidTokens возвращает No valid token, далее идет вызов requestAuthorization - окно авторизации появляется на секунду и пропадает. OKListener опять дает ошибку unsupported_response_type_for_this_app.
Ошибка возникает как при авторизации через webview так и через приложение. Библиотека sdk самая последняя компилируется вместе с приложением. Старая версия SDK в составе asne авторизовалась нормально и даже работала.
Какую версию SDK вообще правильнее использовать ?
Сделать аналогичный метод
requestAuthorization(fragment: Fragment, authType: OkAuthType, vararg scopes: String)
и что бы startActivityForResult вызывался на Fragment`e
Сейчас в методе request
класса Odnoklassniki
используется not-null assertion для поля mAccessToken
.
У нас происходили гонки состояний, поэтому приложение могло падать на этом assert'e (порядка 150 падений в день).
Предлагается сделать этот вызов безопасным:
mAccessToken?.let { accessToken ->
if (mode.contains(OkRequestMode.SIGNED)) {
signParameters(requestParams)
requestParams[PARAM_ACCESS_TOKEN] = accessToken
}
}
Класс OkDevice использует Google API для получения рекламного идентификатора устройства. При этом SDK сам по себе не использует эту функциональность. Предполагается, что этим кодом воспользуется пользователь для передачи результата в sdk.getInstallSource.
Таким образом пользователи SDK вынуждены подключать в своё приложение библиотеки Google-сервисов, даже если они на самом деле не нужны. В нашем случае приложение написано на Adobe AIR и OK SDK завёрнуто в расширение. Подключить туда гуглосервисы возможно, но крайне неудобно. А получить рекламный идентификатор мы можем и сами.
Имхо этот код нужно просто убрать из SDK и поместить его в примеры.
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference
at ru.ok.android.sdk.OkAuthActivity$OAuthWebViewClient.shouldOverrideUrlLoading(OkAuthActivity.java:244)
at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:342)
at org.chromium.android_webview.AwContentsClient.shouldIgnoreNavigation(AwContentsClient.java:168)
at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:257)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(SystemMessageHandler.java)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@24eca3a6 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:680)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:289)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:311)
at android.app.AlertDialog$Builder.show(AlertDialog.java:993)
at ru.ok.android.sdk.OkAuthActivity.showAlert(OkAuthActivity.java:199)
at ru.ok.android.sdk.OkAuthActivity.access$300(OkAuthActivity.java:24)
at ru.ok.android.sdk.OkAuthActivity$OAuthWebViewClient.onReceivedError(OkAuthActivity.java:246)
at com.android.webview.chromium.WebViewContentsClientAdapter.onReceivedError(WebViewContentsClientAdapter.java:605)
at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:7355)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
How handle authorization cancel event? OkListener
callback allows to handle only onError
and onSuccess
events. But when user cancels authorization (e.g. taps back button), SDK fires onError callback (with Авторизация была отменена
error message).
ru.ok:odnoklassniki-android-sdk:2.1.8
На устройстве должно быть установлено приложение "Одноклассники" (без него все работает).
При попытке авторизоваться приходит ошибка "Bad package name".
У нас 3 версии приложения, на которых мы используем один appId и appKey для одноклассников:
В админке нигде не задается package name, поэтому непонятно, почему приходит такая ошибка и как ее фиксить.
Старт авторизации:
Odnoklassniki.instance.requestAuthorization(activity, "okauth://auth", OkAuthType.ANY, OkScope.VALUABLE_ACCESS, OkScope.PHOTO_CONTENT)
Обработка результат:
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (!Odnoklassniki.hasInstance()) return
Odnoklassniki.instance.onAuthActivityResult(requestCode, resultCode, data, object : OkListener {
override fun onSuccess(json: JSONObject) {
try {
val token = String.format("access_token: %s", json.getString("access_token"))
dispatchAsync(Data(State.TOKEN_RECEIVED, token))
} catch (e: JSONException) {
dispatchAsync(Data(State.ERROR_TOKEN_RECEIPT))
errorLog("OK", "unable to parse login request ${e.message}")
}
}
override fun onError(error: String?) {
// error == "Bad package name"
dispatchAsync(Data(State.CANCELLED))
errorLog("OK", "onError $error")
}
})
}
I have added
compile 'ru.ok:odnoklassniki-android-sdk:2.0.3'
Android Studio gives warning
Cannot resolve symbol 'OkAuthListener'
I added import ru.ok.android.sdk.OkAuthListener;
but it gives the same warning.
Версия SDK 2.1.5
При авторизации при помощи SDK в событие OnError иногда возвращается пустая строка, вместо описания ошибки
onActivityResult в родительском Activity был вызван c параметрами:
requestCode=22890, resultCode=2
Ошибка была замечена на 19 и 23 версиях Api Android
Если это штатная ситуация , что можно сообщить пользователю в данном случае?
Версия 2.1.8.
В методе Odnoklassniki.requestAuthorization
есть аргумент @Nullable redirectUri: String
. Он помечен аннотацией, однако сам тип не является nullable, т.к. он не String?
. В связи с этим при использовании этого метода на котлине невозможно прокинуть null в качестве аргумента.
При попытки вызвать виджет постинга получаю ошибку Parameter 'PHOTO id' is invalid, иногда появляется ошибка BAD id. В чем может быть проблема?
До этого получаю ссылку для загрузки сервера, загружаю картинку и получаю id и token картинки.
После этого создаю attachment
"{" +
""media":[" +
"{" +
""type":"text"," +
""text":"hello world!"" +
"},{" +
""type":"photo"," +
""list":[" +
"{" + ""id":"" + token + """ + "}," +
"{" + ""photoId":"" + id + """ + "}" +
"]" +
"}" +
"]" +
"}";
Подскажите , пожалуйста, где у меня ошибка...
Добрый день,
мне кажется есть проблемы во взаимодействии между ok-android-sdk и официальным приложением Odnoklassniki.
Я написал несложное приложение, которое получает access_token (использую credentials от официального примера):
private OkListener mOdnoklassnikiCallback = new OkListener() {
@Override
public void onSuccess(final JSONObject json) {
DatabaseService.fetchOdnoklassnikiUser(MainActivity.this);
}
@Override
public void onError(String error) {
Log.d(TAG, "Odnoklassniki onError: " + error);
}
};
и затем вызывает "users.getCurrentUser" из IntentService:
String jsonStr = Odnoklassniki.getInstance().request("users.getCurrentUser", null, OkRequestMode.DEFAULT);
JSONObject okUser = new JSONObject(jsonStr);
User user = new User(User.ODNOKLASSNIKI);
user.sid = okUser.getString("uid");
user.given = okUser.getString("first_name");
user.family = okUser.getString("last_name");
user.photo = okUser.getString("pic_3");
К сожалению, приложение иногда вылетает с ошибкой:
05-23 17:21:10.996 27448-27448/? W/Bundle: Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at android.os.BaseBundle.getLong(BaseBundle.java:835)
at android.os.BaseBundle.getLong(BaseBundle.java:817)
at ru.ok.android.external.LoginExternal$AuthWebViewClient.shouldOverrideUrlLoading(LoginExternal.java:199)
at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:357)
at org.chromium.android_webview.AwContentsClient.shouldIgnoreNavigation(AwContentsClient.java:168)
at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:352)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5459)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Вот более полный лог:
--------- beginning of main
05-23 17:21:09.988 27481-27728/de.afarber.googleauth V/RenderScript: 0xb83cf038 Launching thread(s), CPUs 4
05-23 17:21:10.019 1788-3936/? I/ActivityManager: START u0 {cmp=ru.ok.android/.external.LoginExternal (has extras)} from uid 10184 on display 0
05-23 17:21:10.023 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:10.042 21137-21137/? I/MemoryTrimmer: Trimming objects from memory, since app is in the background.
05-23 17:21:10.045 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:10.088 27448-27467/? I/art: CollectorTransition marksweep + semispace GC freed 4406(43KB) AllocSpace objects, 1(16KB) LOS objects, 25% free, 10MB/13MB, paused 44.986ms total 44.986ms
05-23 17:21:10.106 27448-29686/? W/cr_BindingManager: Cannot setInForeground() - never saw a connection for the pid: 27448
05-23 17:21:10.110 1788-3856/? D/ConnectivityService: listenForNetwork for Listen from uid/pid:10166/27448 for NetworkRequest [ id=2274, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]
05-23 17:21:10.189 1788-1807/? I/LaunchCheckinHandler: Displayed ru.ok.android/.external.LoginExternal,wp,ca,154
05-23 17:21:10.190 1788-1807/? I/ActivityManager: Displayed ru.ok.android/.external.LoginExternal: +155ms (total +219ms)
05-23 17:21:10.272 21137-21137/? I/MemoryTrimmer: Trimming objects from memory, since app is in the background.
05-23 17:21:10.579 27448-27448/? W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 27448
05-23 17:21:10.995 27448-27448/? W/Bundle: Key expires_in expected Long but value was a java.lang.String. The default value 0 was returned.
05-23 17:21:10.996 27448-27448/? W/Bundle: Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at android.os.BaseBundle.getLong(BaseBundle.java:835)
at android.os.BaseBundle.getLong(BaseBundle.java:817)
at ru.ok.android.external.LoginExternal$AuthWebViewClient.shouldOverrideUrlLoading(LoginExternal.java:199)
at com.android.webview.chromium.WebViewContentsClientAdapter.shouldOverrideUrlLoading(WebViewContentsClientAdapter.java:357)
at org.chromium.android_webview.AwContentsClient.shouldIgnoreNavigation(AwContentsClient.java:168)
at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(AwContentsClientBridge.java:352)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5459)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-23 17:21:11.001 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:11.013 308-308/? I/SFPerfTracer: triggers: (rate: 8623:295997) (compose: 189:10654) (post: 3:4883) (render: 399:19535) (43:1400598 frames) (44:1675435)
05-23 17:21:11.014 308-308/? D/SFPerfTracer: layers: (4:13) (FocusedStackFrame (0xb76c0988): 0:8853)* (DimLayer (0xb7735218): 0:139)* (DimLayer (0xb7737690): 0:4)* (StatusBar (0xb76cd838): 0:156803) (com.android.systemui.ImageWallpaper (0xb7771380): 0:6504)* (DimLayer (0xb777c060): 0:6462)* (DimLayer (0xb7774ef0): 0:1848)* (NavigationBar (0xb7768ea0): 0:174) (Toast (0xb76cae38): 0:64)- (de.afarber.googleauth/de.afarber.googleauth.MainActivity (0xb778ecf8): 0:48)- (de.afarber.googleauth/de.afarber.googleauth.MainActivity (0xb76cae38): 0:25)- (Toast (0xb7783bc8): 16:35) (ru.ok.android/ru.ok.android.external.LoginExternal (0xb7772648): 43:49)
05-23 17:21:11.017 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:11.021 27448-27448/? W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 27448
05-23 17:21:11.030 1788-3934/? W/ActivityManager: Duplicate finish request for ActivityRecord{92eb758 u0 de.afarber.googleauth/ru.ok.android.sdk.OkAuthActivity t4901 f}
05-23 17:21:11.029 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:11.038 3813-8226/? D/ProcSpeedReader: Failed to read freq stats from null
05-23 17:21:11.043 27481-27481/de.afarber.googleauth D/AutoManageHelper: onStart true {0=com.google.android.gms.internal.zzaaa$zza@4821cfe}
05-23 17:21:11.057 27481-27728/de.afarber.googleauth I/OpenGLRenderer: Initialized EGL, version 1.4
05-23 17:21:11.114 3318-3831/? I/NetworkController.MotorolaMobileSignalController(1): MotorolaMobilePhoneStateListener.onDataActivity: Entered: direction=3
05-23 17:21:11.285 27481-30260/de.afarber.googleauth I/SQLiteAssetHelper: successfully opened database social.db
С уважением
При попытке постинга в одноклассники не открывается окно для подтверждения постинга. Если делать то же самое в тестовом приложении Одноклассников, подставив туда свои данные, выдается тост с ошибкой:
errors.web-grabber.communication-error.
Как оказалось, ошибка возникает из-за типа моей ссылки, на которую перенаправляется юзер после клика на пост (поле link в OK SDK). А именно, если в доменном имени присутствует несколько точек (напр. www.test.site.com, www.login.my.site.com).
В руководстве читаю, что
odnoklassniki.request(METHOD_NAME, params, "GET");
Делаю - вижу Deprecated
Как правильно делать запрос odnoklassniki.request - где можно увидеть пример
Steps to reproduce:
requestAuthorization()
method to open OkAuthActivitychange account
to open login screenforgot my password
Sign in with Google
Same for the first sign in via Google. I don't have OK application on the test phone (maybe it matters).
Собственно САБЖ.
После подключения OK Android SDK пользователи с Android 5 начали испытывать трудности при скачивании и установке приложения из Google Play.
Приложение вовсе не запускается, и выдает ошибку еще на этапе установки приложения.
Поскольку ошибка возникает еще на этапе установки, не приходит никаких отчетов о сбоях.
Чтобы выявить ошибку, собрали несколько тестовых сборок, и на устройствах Android 5 не устанавливается именно сборка с OK Android SDK.
Очевидно, что ошибка где-то в OK Android SDK.
Версия SDK 2.1.8
Не вызывается onCancel
по отмене авторизации при установленном, но не авторизованном приложении Одноклассники. Ошибка 100% в самом приложении, не SDK. Пинганите их там.
Версия SDK 2.1.8
Время от времени у пользователей возникают ошибки:
IP_BLOCKED : REST access denied for not listed IP xxx.xxx.xxx.xxx (check app server ip configuration)
Причем, пару раз это было и на эмуляторе на машине разработчика, который явно имеет добропорядочный ip.
Проверьте, все ли ok у OK в этом вопросе.
При попытке авторизоваться через установленный клиент после ввода логина и пароля возвращается ошибка с текстом "Отменено".
Если повторить запрос авторизации - открывается окно, на котором подтверждается вход.
Через WebView авторизация с вводом логина и пароля проходит без ошибок.
В документации на SDK сказано "Для обработки авторизации необходимо, чтобы активити реализовало интерфейс OkTokenRequestListener (методы onSuccess, onCancel и onError)"
В SDK не нашел OkTokenRequestListener
В случае успешной авторизации я возвращаюсь в предыдущее активити, в случае отмены (backButton) - выкидывает домой, и мне приходится заходить в мое свернутое приложение. Есть идеи, как вернуться в активити?
В руководстве читаю, что
odnoklassniki.request(METHOD_NAME, params, "GET");
Делаю - вижу Deprecated
Как правильно делать запрос odnoklassniki.request - где можно увидеть пример
По ссылке "Лучше посмотреть на примере, который внутри самого sdk в репозитории лежит - https://github.com/odnoklassniki/ok-android-sdk/blob/master/odnoklassniki-android-sdk-example/src/main/java/ru/ok/android/sdk/example/MainActivity.kt
Доку - запишем и обновим" примера нужно мне нету
Дайте готовый пример как правильно делать request - интересует именно эта функция
Очень кривая реализация callback fun onError(error: String?), да и onSuccess(json: JSONObject) в OkListener.
Сделать в onError параметр Sealed class, для обработки ошибок. Мне важен тип ошибки: отмена пользователем доступа, или же это onBack, или это какая-то еще ошибка. Плюс вы возвращаете ЛОКАЛИЗИРОВАННЫЕ строки ошибок. Я не вывожу эти ошибки на экран, а завязываю логику. И для условия пришлось делать кучу const строк для одной ситуации. Это не правильный подход. Посмотрите как сделает Facebook SDK. Верните эти строке в поле класса.
Пример кода обработки ошибки, которого быть не должно:
private val OK_SDK_AUTH_CANCELED_CODES = listOf( "access_denied", "Authorization was canceled", "Авторизация была отменена" )
Так же в onSuccess хочется взять из объекта класса поле accessToken а не парсить JSON в режиме debug и вытаскивать из поля access_token, которое может поменяться и никто не заметит ошибки.
Там почти всё юзается из deprecated + нужно добавить timeout
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.