VKSdk.authorize () 후 VKRequest에서 "유효하지 않은 사용자 ID"오류가 발생합니다. 차례로?

Yurets

을 클릭하여 사용자 프로필 정보를 요청합니다 Button. 나는 디버깅하고 방금 앱을 열고 버튼 onError콜백을 클릭했을 때 "잘못된 사용자 ID"라고 말했습니다. Button두 번째로 누르면 잘 작동합니다. 실험을 통해 앱이 승인을 완료하지 못했기 때문에 요청이 거부되었음을 알았습니다. Button이 코드로 calls 메서드 를 누르면 :

VKSdk.authorize(VKScopes.EMAIL);
VKRequest request = VKApi.users().get(VKParameters.from(VKApiConst.FIELDS,
    "user_id,first_name,last_name,sex,bdate,city,photo_200_orig"));
request.secure = false;
request.useSystemLanguage = true;
request.executeWithListener(new VKRequest.VKRequestListener() {
     @Override
     public void onComplete(VKResponse response) {
         super.onComplete(response);
         //do some stuff
     }
     @Override
     public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) {
          super.attemptFailed(request, attemptNumber, totalAttempts);
          Log.d("VkDemoApp", "attemptFailed " + request + " " + attemptNumber + " " + totalAttempts);
    }
    @Override
    public void onError(VKError error) {
         super.onError(error);
         Log.d("VkDemoApp", "onError: " + error);
    }
    @Override
    public void onProgress(VKRequest.VKProgressType progressType, long bytesLoaded, long bytesTotal) {
         super.onProgress(progressType, bytesLoaded, bytesTotal);
         Log.d("VkDemoApp", "onProgress " + progressType + " " + bytesLoaded + " " + bytesTotal);
    }
});

을 추가하려고 if(VKSdk.wakeUpSession())했지만 단순히 통과했으며 사용자는 아직 권한이 없습니다. 필요한 경우 사용자에게 권한을 부여하는의 onTokenExpired일부로 예제 콜백에서 찾았 listener지만 추가했을 때 "사용되지 않음"이라고 표시되었습니다.

VKSdk.authorize()작업이 끝날 때까지 그리고 요청을 보낸 후에 만 기다릴 수 있습니까? 미리 감사드립니다!

편집하다

이것은 라인입니다 onCreate()

VKSdk.initialize(sdkListener, activity.getResources().getString(R.string.vk_app_id));
VKUIHelper.onCreate(this);

VKSdkListener

VKSdkListener sdkListener = new VKSdkListener() {
    @Override
    public void onAcceptUserToken(VKAccessToken token) {
    }

    @Override
    public void onReceiveNewToken(VKAccessToken newToken) {
        //requesting the code at the top (request)
        //excluding the line VKSdk.authorize(VKScopes.EMAIL);
    }

    @Override
    public void onRenewAccessToken(VKAccessToken token) {
    }
    @Override
    public void onCaptchaError(VKError vkError) {
    }
    @Override
    public void onTokenExpired(VKAccessToken vkAccessToken) {
    }
    @Override
    public void onAccessDenied(VKError vkError) {
    }
};

그리고 onClick()라인이 있습니다VKSdk.authorize(VKScopes.EMAIL);

참고 VkSdkListener의 콜백은 이후에 호출되지 않고 이후 initialize()에 호출 authorize()됩니다. 이유를 모르겠습니다.이 행동이 끔찍합니다. 위에 나열된 사용자의 이메일 및 기타 사항으로 작업 예제를 보는 것이 좋을 것입니다.

심미적

내가 틀릴 수도 있지만 "user_id"를 "id"로 변경해보십시오. 두 번째 질문 (인증 후 데이터를 가져 오는 방법)에 대한 답은 간단합니다. VKsdk에는 재정의 할 수있는 (그리고 재정의해야하는) 추상 메서드가있는 리스너가 있습니다.

편집하다

private static final String[] sVkontakteScopes = new String[]{
        VKScope.FRIENDS,
        VKScope.PHOTOS,
        VKScope.NOHTTPS,
};

private VKSdkListener mVkontakteLoginListener;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState, persistentState);

    mVkontakteLoginListener = new VKSdkListener() {
        @Override
        public void onCaptchaError(VKError captchaError) {
            new VKCaptchaDialog(captchaError).show(VkApiActivity.this);
        }

        @Override
        public void onTokenExpired(VKAccessToken expiredToken) {
            VKSdk.authorize(sVkontakteScopes);
        }

        @Override
        public void onAccessDenied(VKError authorizationError) {
            new AlertDialog.Builder(VKUIHelper.getTopActivity())
                    .setMessage(authorizationError.toString())
                    .show();
        }

        @Override
        public void onReceiveNewToken(VKAccessToken newToken) {
            //put your method here
            makeYourStuff();
            PrefUtils.storeVkontakteAccessToken(newToken.accessToken);
        }

        @Override
        public void onAcceptUserToken(VKAccessToken token) {
            //put your method here
            makeYourStuff();
        }

        @Override
        public void onRenewAccessToken(VKAccessToken token) {
            //put your method here
            makeYourStuff();
        }
    };

    if (PrefUtils.getVkontakteAccessToken() != null)
        VKSdk.initialize(mVkontakteLoginListener, getString(R.string.vkontakte_app_id, PrefUtils.getVkontakteAccessToken()));
    else {
        VKSdk.initialize(mVkontakteLoginListener, getString(R.string.vkontakte_app_id));
    }
    VKUIHelper.onCreate(this);
}


private void makeYourStuff() {
    VKParameters params = new VKParameters();
    params.put(VKApiConst.FIELDS, "id,first_name,last_name, photo_100");

    VKRequest request = new VKRequest("users.get", params);
    request.executeWithListener(new VKRequest.VKRequestListener() {

        @Override
        public void onComplete(VKResponse response) {
            super.onComplete(response);
            JSONArray jsonArray;
            String firstName, lastName, id, photoUrl;


            try {
                jsonArray = response.json.getJSONArray("response");
                JSONObject userObject = jsonArray.getJSONObject(0);
                firstName = userObject.getString("first_name");
                lastName = userObject.getString("last_name");
                id = userObject.getString("id");
                photoUrl = userObject.getString("photo_100");

                /*
                    here you can start another activity or fragment

                    put this info into bundle or store into database

                */
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onError(VKError error) {
            super.onError(error);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    VKUIHelper.onActivityResult(this, requestCode, resultCode, data);
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.btnLogin) {
        VKSdk.authorize(sVkontakteScopes);
        // after this method will be called your one of your          VKSdkListener methods
        // you should put your request method all three SUCCESS methods of VKSdk listener
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Ubuntu 14.04를 새로 설치 한 후 shim 서명 오류가 발생합니다.

분류에서Dev

0.9.2에서 0.9.5로 업데이트 한 후 "java.lang.IllegalArgumentException : Illegal group reference"오류가 발생합니다.

분류에서Dev

Firebase에서 항목을 성공적으로 삭제 한 후 오류가 발생합니다.

분류에서Dev

qt4.8에서 qt5.2로 이식 한 후 런타임 오류가 발생합니다.

분류에서Dev

Xamarin.IOS에서 통합 버전으로 마이그레이션 한 후 오류가 발생했습니다.

분류에서Dev

Ruby PayPal SDK, Authorize 코드에서 토큰 정보를 가져 오면 400 오류가 발생합니다.

분류에서Dev

로그인 후 URL에 사용자 이름을 추가하는 동안 NoReverseMatch 오류가 발생합니다.

분류에서Dev

미리 서명 된 URL을 생성 한 후 NoSuchKey 오류가 발생합니다.

분류에서Dev

이 (http-proxy-middleware) 사용 후 reactjs 에서이 오류가 발생합니다.

분류에서Dev

Stripe + React에서 잘못된 후크 호출 오류가 발생합니다.

분류에서Dev

os.walk를 사용한 후 Join에서 startswith 오류가 발생합니다.

분류에서Dev

업데이트 후 Android Studio에서 오류가 발생합니다.

분류에서Dev

ghci에서 꽃 괄호로 차단하면 오류가 발생합니다.

분류에서Dev

내 프로그램에서 오류가 발생합니다.

분류에서Dev

unity에서 currentActivity를 가져올 수 없으며 장치에서 응용 프로그램을 실행 한 후 다음 오류가 발생합니다.

분류에서Dev

Oauth facebook 로그인 후 "액세스 불가"오류가 발생합니다.

분류에서Dev

dlib-19.1을 사용한 후 VS 2015에서 "표현식이 상수로 평가되지 않았습니다"라는 오류가 발생합니다.

분류에서Dev

오류 유효성 검사가 발생한 후 onChange에서 React 후크가 오작동합니다.

분류에서Dev

Cocoapods를 추가 한 후 iOS 프로젝트에서 빌드 오류가 발생합니까?

분류에서Dev

Laravel Passport에서 '키를 구문 분석 할 수 없습니다. 이유 : PHP8.0으로 업그레이드 한 후 ""'오류가 발생합니다.

분류에서Dev

okhttp3에서 프로토콜 예외 오류가 발생합니다. 후속 요청이 너무 많습니다. 21

분류에서Dev

Devise를 3.2.3으로 업그레이드 한 후 오류가 발생합니다.

분류에서Dev

이 요소를 다른 angular9.1.1 프로젝트에 포함시킨 후 Angular (9.1.1) 요소에서 오류가 발생합니다.

분류에서Dev

Node.JS 서버 전송 이벤트 : res.end () 이후에 경로가 계속 실행되어 ERR_STREAM_WRITE_AFTER_END 오류가 발생합니다.

분류에서Dev

Windows가 1909로 업데이트 된 후 VS Studio 2019에서 솔루션을 빌드하는 동안이 오류가 발생합니다.

분류에서Dev

oozie 워크 플로에서 소켓 오류가 발생하지만 10 분 후에 워크 플로를 두 번 제출합니다.

분류에서Dev

트리거 (UPDATE 후)로 인해 오류가 발생합니까?

분류에서Dev

Codeigniter 웹 사이트를 서버에 업로드 한 후 오류가 발생했습니다.

분류에서Dev

Swift 2.0에서 Swift 3.0으로 코드 마이그레이션 후 오류가 발생했습니다.

Related 관련 기사

  1. 1

    Ubuntu 14.04를 새로 설치 한 후 shim 서명 오류가 발생합니다.

  2. 2

    0.9.2에서 0.9.5로 업데이트 한 후 "java.lang.IllegalArgumentException : Illegal group reference"오류가 발생합니다.

  3. 3

    Firebase에서 항목을 성공적으로 삭제 한 후 오류가 발생합니다.

  4. 4

    qt4.8에서 qt5.2로 이식 한 후 런타임 오류가 발생합니다.

  5. 5

    Xamarin.IOS에서 통합 버전으로 마이그레이션 한 후 오류가 발생했습니다.

  6. 6

    Ruby PayPal SDK, Authorize 코드에서 토큰 정보를 가져 오면 400 오류가 발생합니다.

  7. 7

    로그인 후 URL에 사용자 이름을 추가하는 동안 NoReverseMatch 오류가 발생합니다.

  8. 8

    미리 서명 된 URL을 생성 한 후 NoSuchKey 오류가 발생합니다.

  9. 9

    이 (http-proxy-middleware) 사용 후 reactjs 에서이 오류가 발생합니다.

  10. 10

    Stripe + React에서 잘못된 후크 호출 오류가 발생합니다.

  11. 11

    os.walk를 사용한 후 Join에서 startswith 오류가 발생합니다.

  12. 12

    업데이트 후 Android Studio에서 오류가 발생합니다.

  13. 13

    ghci에서 꽃 괄호로 차단하면 오류가 발생합니다.

  14. 14

    내 프로그램에서 오류가 발생합니다.

  15. 15

    unity에서 currentActivity를 가져올 수 없으며 장치에서 응용 프로그램을 실행 한 후 다음 오류가 발생합니다.

  16. 16

    Oauth facebook 로그인 후 "액세스 불가"오류가 발생합니다.

  17. 17

    dlib-19.1을 사용한 후 VS 2015에서 "표현식이 상수로 평가되지 않았습니다"라는 오류가 발생합니다.

  18. 18

    오류 유효성 검사가 발생한 후 onChange에서 React 후크가 오작동합니다.

  19. 19

    Cocoapods를 추가 한 후 iOS 프로젝트에서 빌드 오류가 발생합니까?

  20. 20

    Laravel Passport에서 '키를 구문 분석 할 수 없습니다. 이유 : PHP8.0으로 업그레이드 한 후 ""'오류가 발생합니다.

  21. 21

    okhttp3에서 프로토콜 예외 오류가 발생합니다. 후속 요청이 너무 많습니다. 21

  22. 22

    Devise를 3.2.3으로 업그레이드 한 후 오류가 발생합니다.

  23. 23

    이 요소를 다른 angular9.1.1 프로젝트에 포함시킨 후 Angular (9.1.1) 요소에서 오류가 발생합니다.

  24. 24

    Node.JS 서버 전송 이벤트 : res.end () 이후에 경로가 계속 실행되어 ERR_STREAM_WRITE_AFTER_END 오류가 발생합니다.

  25. 25

    Windows가 1909로 업데이트 된 후 VS Studio 2019에서 솔루션을 빌드하는 동안이 오류가 발생합니다.

  26. 26

    oozie 워크 플로에서 소켓 오류가 발생하지만 10 분 후에 워크 플로를 두 번 제출합니다.

  27. 27

    트리거 (UPDATE 후)로 인해 오류가 발생합니까?

  28. 28

    Codeigniter 웹 사이트를 서버에 업로드 한 후 오류가 발생했습니다.

  29. 29

    Swift 2.0에서 Swift 3.0으로 코드 마이그레이션 후 오류가 발생했습니다.

뜨겁다태그

보관