을 클릭하여 사용자 프로필 정보를 요청합니다 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] 삭제
몇 마디 만하겠습니다