Android用のRake VK SDK

こんにちはHabr! 最近、ソーシャルを統合する必要がありました。 Android用プロジェクトのネットワーク。 選択はVKに落ち、それに応じて、彼らの公式ライブラリVKCOM / vk-android-sdkが選ばれました 。 以前に使用していましたが、例が少ないため、それでも喜んでいませんでした。 今私はソースコードを見ますが、それは理想ともほど遠いです。



私は通常、アプリケーションを起動するときに常に設定のキーを見て、これを見ました(承認後):



: VK_SDK_ACCESS_TOKEN_PLEASE_DONT_TOUCH : scope=offline&https_required=1&access_token=e5cd068be722caafd3c449557e19c19eeed3f54c295a65cd097ed087f61c44394bd985975364fc34641cc&expires_in=0&created=1476876628588&user_id=220436550
      
      





アラート。 そのようなデータを平文で保存するのは良くないと思います。 一般に、最初の会議の後でも、承認中に入力データを読み取る可能性について考えていました。 どうして?



モジュールとしてインポートするだけです。 メインクライアントを介した承認の可能性を削除します(2番目のオプションはそのままにします)。



 if (VKUtil.isAppInstalled(ctx, VK_APP_PACKAGE_ID) && VKUtil.isIntentAvailable(ctx, VK_APP_AUTH_ACTION) && fingerprints.length > 0 && fingerprints[0].equals(VK_APP_FINGERPRINT)) { if (savedInstanceState == null) { intent = new Intent(VK_APP_AUTH_ACTION, null); intent.setPackage(VK_APP_PACKAGE_ID); intent.putExtras(bundle); startActivityForResult(intent, VKServiceType.Authorization.getOuterCode()); } } else { new VKOpenAuthDialog().show(this, bundle, VKServiceType.Authorization.getOuterCode(), null); }
      
      





» ソースはこちら



カスタムWebビューをわずかにアップグレードします。



 @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { return new BaseInputConnection(this, false); } @Override public boolean dispatchKeyEvent(KeyEvent event) { super.dispatchKeyEvent(event); //   event  if (event.getAction() == KeyEvent.ACTION_UP) { Log.d("TAG", event.getKeyCode() + " | " + event.toString()); } return true; }
      
      





» ソースはこちら



StackOverFlowへの回答に感謝します。 パスワードを取得し、ダイアログボックスに手動で入力すると、ログインが完全に読み取られます(コピーアンドペーストなし)。 キャラクターの大文字小文字を定義することもできます:



Logcat出力
7 | KeyEvent {action = ACTION_UP、keyCode = KEYCODE_0、...、source = 0x0}

59 | KeyEvent {action = ACTION_UP、keyCode = KEYCODE_SHIFT_LEFT、...、source = 0x0}

40 | KeyEvent {action = ACTION_UP、keyCode = KEYCODE_L、...、source = 0x0}


これはすべて大きなチャンスを開きます。 おそらく、あなたはまだ同様の例をピックアップすることができます。

私はcookieが少し特別ですが、たとえば、 remixstid, remixmdevice, remixlang, remixlhk.



各フィールドを管理することができremixstid, remixmdevice, remixlang, remixlhk.



メインクラスのアカウントのexit関数の説明から判断すると、トークンデータに関連しているようです。



 /** * Wipes out information about the access token and clears cookies for internal browse */ @SuppressLint("NewApi") public static void logout() { ... CookieManager.getInstance().removeAllCookies(null); ... }
      
      





» ソースはこちら



VKの場合、認証をメインクライアントに完全に転送することをお勧めします 。 APIについては、詳細な例を記入してください(既存のjavadocに加えてGitHubのWikiも悪くありません)。 しかし、現在、このアプローチを使用することは疑わしいです。



ご清聴ありがとうございました!



All Articles