大约一年前,我制作了一个安卓应用程序。该应用程序应用于从您的 VK 墙上查看视频。
这个想法是这样的:如果用户被授权,开始屏幕会立即充满他的视频列表。如果未授权,则应出现授权窗口。
现在我回到应用程序,看到了一张奇怪的图片。 用户授权窗口显示不正确。
授权窗口activity没有后台填写。通过它你可以看到背景主屏幕。小部件的样式也看起来不正确。
但是输入登录名和密码的所有必要字段都有效。
确认权限和退出的窗口是同一种窗口。但该功能有效。
这是开始的activity(还没有列表)。
我没有更改旧代码中的任何内容。刚刚升级了版本gradle (с 4.1 до 4.6)和SdkVersion (с 25 до 28).
build.gradle实施_'com.vk:androidsdk:1.6.9'
在清单中,根据说明,我指出:
<activity
android:name="com.vk.sdk.VKServiceActivity"
android:label="ServiceActivity"
android:theme="@style/VK.Transparent" />
初始化也是按照说明进行的:
public class Aplication extends android.app.Application {
Context context;
VKAccessTokenTracker vkAccessTokenTracker = new VKAccessTokenTracker() {
@Override
public void onVKAccessTokenChanged(VKAccessToken oldToken, VKAccessToken newToken) {
if (newToken == null) {
Toast.makeText(context, "AccessToken invalidated", Toast.LENGTH_LONG).show();
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
};
@Override
public void onCreate() {
super.onCreate();
vkAccessTokenTracker.startTracking();
VKSdk.initialize(this);
}
}
我没有使用自定义样式。
在 AndroidStudio 中:
targetSdkVersion 28
gradle-4.6
我启动的设备:
小米红米 Note 4X
安卓:7.0*
应用程序“VKontakte” - 未安装。
对于访问,和以前一样,使用 VPN。
已经为开发人员挖了手册VK。在这个论坛上没有看到任何VK关于这个问题的信息。
自定义登录屏幕将不起作用,因为它VK不允许普通人这样做。
除了神秘的短语外,我Andriod SDK在文档中没有找到任何内容:
...
<application>添加<activity android:name="com.vk.sdk.VKServiceActivity" android:label="ServiceActivity" android:theme="@style/VK.Transparent" />否则,启动授权活动可能会出现问题。
但是我已经添加了所有内容!
关于检查其他设备。
在真实设备上正确显示:
1)Samsung Galaxi Win Android 4.1。屏幕 = 480x800
2) Xiaomi Redmi Note Pro 3 16GB Android 6.0。与屏幕 = 1920x1080。
也就是说,1920x1080 屏幕的具有权限的选项和布局错误选项消失了。由于我的Xiaomi Redmi Note 4X屏幕太1920x1080。
在 Logcat 中,当我在 Android 7.0 上启动我的应用程序时,我发现了以下几行:
E/RecyclerView: No adapter attached; skipping layout
D/EgretLoader: EgretLoader(Context context)
D/EgretLoader: The context is not activity
W/ContentCatcher: Failed to notify a WebView
I/chromium: [INFO:CONSOLE(143)] "Uncaught ReferenceError: vkNow is not defined", source: https://oauth.vk.com/authorize?client_id=6271282&scope=video,wall,friends,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (143)
I/chromium: [INFO:CONSOLE(155)] "Uncaught TypeError: Cannot set property 'stickers' of undefined", source: https://oauth.vk.com/authorize?client_id=6271282&scope=video,wall,friends,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (155)
我以为我做错了什么或忘记了什么。
我决定从 VK 运行官方示例。
结果 - Android 7.0 上的登录激活看起来也有问题。
并且在 VK 应用程序的 logcat 中,这些行与我的类似:
I/Timeline: Timeline: Activity_launch_request time:100319497 intent:Intent { cmp=com.vk.vktestapp/com.vk.sdk.VKServiceActivity (has extras) }
D/EgretLoader: EgretLoader(Context context)
The context is not activity
W/ContentCatcher: Failed to notify a WebView
I/chromium: [INFO:CONSOLE(143)] "Uncaught ReferenceError: vkNow is not defined", source: https://oauth.vk.com/authorize?client_id=3974615&scope=friends,wall,photos,nohttps,messages,docs,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (143)
I/chromium: [INFO:CONSOLE(155)] "Uncaught TypeError: Cannot set property 'stickers' of undefined", source: https://oauth.vk.com/authorize?client_id=3974615&scope=friends,wall,photos,nohttps,messages,docs,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.21&response_type=token&revoke=1 (155)
2018 年 11 月 12 日更新:
为方便起见,我决定不修改我的应用程序,而是继续搜索更接近原始代码的位置。为了熟悉这个问题,我从 VK 制作了官方应用程序的 Fork。在 gredle 中进行了更新。
此外,我立即组装了 APK 并将其上传到 Google 驱动器,这样我就可以运行提供 VK 的测试样本,而无需 android studio 的麻烦。而且,可以这么说,用自己的眼睛看问题。


真相大白——问题出在通过 VPN 访问 Internet 上。
我设法在同一部手机上检查了登录屏幕的启动,但没有 VPN,而是直接检查。
结果,登录窗口正常加载。针不会去任何地方。并且日志中没有错误。
结论 - 您需要细化从 VK 服务器同步下载数据的过程。