рдлрд┐рд░ рд╕реЗ рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд▓реЛрдЧ рдЕрдкрдиреА VKontakte рджреАрд╡рд╛рд░ рдкрд░ рдкрджреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд▓реЗрдЦред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реЛрдВрдЧреЗ, рдХреЛрдИ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА, рдпрд╣ рдкреЛрд╕реНрдЯ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реЗрд▓реА рдмрдирд╛рддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреАред рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рдФрд░ рдлреЗрд╕рдмреБрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдУрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдмрд╛рдж рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдХреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦреАрдВред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдлреЗрд╕рдмреБрдХ рдПрд╕рдбреАрдХреЗ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдлреЗрд╕рдмреБрдХ рдПрд╕рдбреАрдХреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдпрд╣ рдордЬрдмреВрдд рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдареАрдХ рд╣реИ ... рдкрд░рд┐рдпреЛрдЬрдирд╛) рдореЗрдВ рддреАрди рд╡рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╢рд▓рдЬрдо рд╕реЗ рд▓рд┐рдВрдХ): VkSession - рд╡реАрдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ (рдЯреЛрдХрди, user_id, рдЖрджрд┐), VkDialog - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╡рд╛рдж рдХрд╛ рд╡рд░реНрдЧ, VkApp - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдБ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред Vkontakte рдореЗрдВ рдПрдкреАрдЖрдИ рдкрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╣реИ -
рдбреЙрдХ рдСрди рдПрдкреАрдЖрдИ ред рд╣рдо рдлрдВрдХреНрд╢рди рд╡рд╛рд▓ рдвреВрдВрдврддреЗ рд╣реИрдВред рдкреЛрд╕реНрдЯ - рдЯрд╛рдпрд░ред рд╣рдо рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ OAuth рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдкрддреНрд░ рд╣реИ) рдФрд░ рдлрд┐рд░ рдЗрд╕ рдЖрдИрдбреА рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, Vkontakte рд╣рдореЗрдВ рдПрдХ AccessToken рднреЗрдЬреЗрдЧрд╛, рдЬрд┐рд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЯреЛрдХрди рдХреЗрд╡рд▓ 24 рдШрдВрдЯреЗ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреЗрдХ рдХрд░рдиреЗ рдФрд░ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ VkSession рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
package vkontakte; import android.content.Context; import android.content.SharedPreferences; public class VkSession { private SharedPreferences _prefs; private final String PREFS_NAME = "Vk:Settings"; private Context _context; private SharedPreferences.Editor _editor; public VkSession(){} public VkSession(Context context){ _context = context; _prefs = _context.getSharedPreferences(PREFS_NAME, 0); _editor = _prefs.edit(); } public void saveAccessToken(String accessToken, String expires, String userId){ _editor.putString("VkAccessToken", accessToken); _editor.putString("VkExpiresIn", expires); _editor.putString("VkUserId", userId); _editor.putLong("VkAccessTime", System.currentTimeMillis()); _editor.commit(); } public String[] getAccessToken(){ String[] params = new String[4]; params[0] = _prefs.getString("VkAccessToken", ""); params[1] = _prefs.getString("VkExpiresIn", ""); params[2] = _prefs.getString("VkUserId", ""); params[3] = String.valueOf(_prefs.getLong("VkAccessTime",0)); return params; } public void resetAccessToken(){ _editor.putString("VkAccessToken", ""); _editor.putString("VkExpiresIn", ""); _editor.putString("VkUserId", ""); _editor.putLong("VkAccessTime", 0); _editor.commit(); } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ SharedPreferences рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рдмрд╛рдд рд╣реИред
рдЕрдЧрд▓рд╛, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкред VkApp рд╡рд░реНрдЧ, рдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕реЗ:
public class VkApp {
рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВред рдЬрдм рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, VKontakte рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ
api.vkontakte.ru/blank.html рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдПрдХ рдХреЛрд░рд╛ рдкреГрд╖реНрда рд╣реИ (рдореИрдВ рдХрд╛рдо рдХрд╛ рд╕рд╣реА рд╕рд╛рд░ рдирд╣реАрдВ рдпрд╛рдж рд░рдЦ рд╕рдХрддрд╛, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдзреНрдпрд╛рди рд░рдЦреЗрдВ)ред рдЗрд╕ рдкрддреЗ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЕрдЧрд▓рд╛, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЧреБрдВрдЬрд╛рдЗрд╢ (рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░), рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдХрд╛рд░, рдкрд╛рдардХ рдХрд╛ рдкрддрд╛, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдм рдЧреЛрджреА рдореЗрдВ рд╣реИред рдЗрд╕реЗ рдкрдврд╝реЗрдВ!
рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ:
//parse vkontakte JSON response private boolean parseResponse(String jsonStr){ boolean errorFlag = true; JSONObject jsonObj = null; try { jsonObj = new JSONObject(jsonStr); JSONObject errorObj = null; if( jsonObj.has("error") ) { errorObj = jsonObj.getJSONObject("error"); int errCode = errorObj.getInt("error_code"); if( errCode == 14){ errorFlag = false; } } } catch (JSONException e) { e.printStackTrace(); } return errorFlag; } //publicate message to vk users' wall public boolean postToWall(String message) { boolean errorFlag = true; String[] params = _vkSess.getAccessToken(); String accessToken = params[0]; String ownerId = params[2]; //set request uri params VK_POST_TO_WALL_URL += "owner_id="+ownerId+"&message="+Uri.encode(message)+"&access_token="+accessToken; //send request to vkontakte api HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(VK_POST_TO_WALL_URL); try { HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); String responseText = EntityUtils.toString(entity); //parse response for error code or not errorFlag = parseResponse(responseText); } catch(ClientProtocolException cexc){ cexc.printStackTrace(); } catch(IOException ioex){ ioex.printStackTrace(); } return errorFlag; }
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЕрдкрд╛рдЪреЗ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдПрдХ рдЬрд╡рд╛рдм рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реЗрдЯ рд╣реИ - HttpClient рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ GET рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрд╡рд╛рдж рдореЗрдВ рдПрдХ WebView рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
private class VkWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(VkApp.CALLBACK_URL) & ( !url.contains("error") )) { mListener.onComplete(url); VkDialog.this.dismiss(); return true; } else if(url.contains("error")){ VkDialog.this.dismiss(); return false; } else { view.loadUrl(url); return true; } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); mListener.onError(description); VkDialog.this.dismiss(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if( url.contains("error") ) { VkDialog.this.dismiss(); return; } else if( url.contains("access_token")) { VkDialog.this.dismiss(); mListener.onComplete(url); return; } mSpinner.show(); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mSpinner.dismiss(); } }
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ, рд╣рдо VKontakte рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреЗрдЬреЗ рдЧрдП рдкрддреЗ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рднреА рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдХреЛрдб рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рд╕рдордЭреЗ рдЗрд╕реЗ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЧрд╛ред рд╡реИрд╕реЗ, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдлреЗрд╕рдмреБрдХ рдПрд╕рдбреАрдХреЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рднреА рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдПрдЪрдЯреАрд╕реА рдлреЛрди рдкрд░ рд╣реЛрддреА рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛!
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдкреАрдПрдо рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕реБрдЭрд╛рд╡, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЖрджрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ -
рд╢рд▓рдЬрдо