рд╣рдо рдЖрдкрдХреЗ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Twitter рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ
Google рдлреЛрди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рдЦрд┐рд▓реМрдирд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рдореИрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдирд┐рдХрд▓рд╛, рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдкрдХреЗ рдЦрд╛рддреЗ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рдХрд╛рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдереЛрдбрд╝рд╛ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдореБрдЭреЗ рд╡рд╣ рдХреЛрдб рдорд┐рд▓ рдЧрдпрд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рдХрд╛рдлреА рдХрд╛рд░рдЧрд░ рд╕рд╛рдмрд┐рдд рд╣реБрдЖред рдЦреИрд░, рдЪрд▓реЛ рдПрдХреАрдХрд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЯреНрд╡рд┐рдЯрд░ рдиреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП OAuth рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧ рдХреЛ рд╕реАрдзреЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:
рд╕рд╛рдЗрдирдкреЛрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдЯреНрд╡реАрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ OAuth рддрдВрддреНрд░,
Twitter4J рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд╡рд┐рдЯрд░ рдЦрд╛рддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ
рдпрд╣рд╛рдВ рдкрдВрдЬреАрдХрд░рдг
рдХрд░реЗрдВ )ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣рдо рдЬрд╛рддреЗ рд╣реИрдВ
рдЕрдм рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдирд┐рдореНрди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░) - рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдХрд╛рд░ - рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╢реЗрд╖ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП (рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ & # ^ & JKLLKL: URL рдФрд░ рдХреЙрд▓рдмреИрдХ URL рдореЗрдВ, рд╡рд╣ рд╕рдм рдХреБрдЫ рджрд░реНрдЬ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдЙрд╕реЗ рдЪрд╛рд╣рд┐рдП)ред

рдЬреИрд╕реЗ рд╣реА рд╣рдо рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░ рдЧрдП, рдХреИрдкреНрдЪрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ - рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рда рджреЗрдЦреЗрдВрдЧреЗред
рдЙрдкрднреЛрдХреНрддрд╛ рдХреБрдВрдЬреА
************************* (рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ)
рдЙрдкрднреЛрдХреНрддрд╛ рд░рд╣рд╕реНрдп
************************* (рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ)
рдЯреЛрдХрди URL рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
api.twitter.com/oauth/request_tokenрдЯреЛрдХрди URL рддрдХ рдкрд╣реБрдБрдЪреЗрдВ
api.twitter.com/oauth/access_tokenURL рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ
api.twitter.com/oauth/authorizeрдкрдВрдЬреАрдХреГрдд OAuth рдХреЙрд▓рдмреИрдХ URL
smth.comрд╣рд╛рдВ, рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣рд╛рдВ рд╣рдо рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкрддрд╛рдХрд╛ рдХрд╛ рд╕реНрддрдВрдн-commonshttp4-1.2.1.1.jar
- рдкрддрд╛рдХрд╛ рдХрд╛ рд╕реНрддрдВрдн рдХреЛрд░-1.2.1.1.jar
- httpclient-4.0.1.jar
- twitter4j рдХреЛрд░-2.1.11


рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд╕реАрд╕реА рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдпред
рдирддреАрдЬрддрди, рд╣рдо рдПрдХ рдЫреЛрдЯреА рдпреЛрдЬрдирд╛ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ 1 рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реЛрдЧреАред
- рд╕реНрдерд┐рддрд┐ рдкрдЯреНрдЯреА рдЬреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдо рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ
- рдЯреНрд╡реАрдЯ рдмрдЯрди, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджреЗрд╢ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдо рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ
- рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реБрдП (рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)

рд▓рдЧрд╛рддрд╛рд░ рдлрд╝рд╛рдЗрд▓
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
public class Constants { public static final String CONSUMER_KEY = "< CONSUMER KEY >"; public static final String CONSUMER_SECRET= "< CONSUMER SECRET >"; public static final String REQUEST_URL = "http://api.twitter.com/oauth/request_token"; public static final String ACCESS_URL = "http://api.twitter.com/oauth/access_token"; public static final String AUTHORIZE_URL = "http://api.twitter.com/oauth/authorize"; final public static String CALLBACK_SCHEME = "x-latify-oauth-twitter"; final public static String CALLBACK_URL = CALLBACK_SCHEME + "://callback"; }
рдореБрдЭреЗ рдЖрдкрдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмреАрдЪ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдЖрд░реЗрдЦ рджреЗрдВред

CONSUMER_KEY - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреЛрдЦреА рдХреБрдВрдЬреА, рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рд▓реЙрдЧрд┐рди рдЬреИрд╕рд╛ рдХреБрдЫ)
CONSUMER_SECRET - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреБрдкреНрдд рдХреБрдВрдЬреА ("рд▓реЙрдЧрд┐рди" рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рддрд░рд╣ рдХреБрдЫ)
REQUEST_URL - рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрде рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред рд╣рдо рдкрдВрдЬреАрдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
AUTHORIZE_URL - рдЯреНрд╡рд┐рдЯрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ URLред рдФрде рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред рд╣рдо рдкрдВрдЬреАрдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
ACCESS_URL - рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдФрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред рд╣рдо рдкрдВрдЬреАрдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдХреЙрд▓рдмреИрдХ рд╕реНрдХреАрдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рд░реНрдХрд┐рдЯрд░реА рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рднреА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣рд╛рдВ x-sample-oauth-twitter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
CALLBACK_URL - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХреЙрд▓рдмреИрдХ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдлрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд▓рд░рд╡ рдмрдЯрди
tweet.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (TwitterUtils.isAuthenticated(prefs)) { sendTweet(); } else { Intent i = new Intent(getApplicationContext(), PrepareRequestTokenActivity.class); i.putExtra("tweet_msg",getTweetMsg()); startActivity(i); } } });
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╣рдорд╛рд░рд╛ рдмрдЯрди рдмрд╕ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рд╣реИ, рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UseRequestTokenActivity рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдмрд╛рдж рдореЗрдВ рд▓реЙрдЧ рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ред
Autenfikatsiya
рдкрд╣рд▓реЗ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╣рдо (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рдЕрднреА рддрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░реЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХреЗрдВ, рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкреНрд░рд┐рдкреЗрдпрд░рдЗрд╕реЗрд╕реНрдЯреЗрдХреНрдЯреЗрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рди рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
ReadyRequestTokenActivity - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреНрд░рджрд╛рддрд╛ OAuth (Signpost рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ OAuthRequestTokenTask рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдХреЙрд▓рдмреИрдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрдм рд╣рдо рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИрдВред
OAuthRequestTokenTask - рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
RetrieveAccessTokenTask - рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧред рддреИрдпрд╛рд░ рдХреА рдЧрдИ NewRntestTokenActivity рдХреА рдирдИ рд╡рд┐рдзрд┐ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
ReadyRequestTokenActivity рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ OAuthRequestTokenTask рдХреЙрд▓
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { this.consumer = new CommonsHttpOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); this.provider = new CommonsHttpOAuthProvider(Constants.REQUEST_URL,Constants.ACCESS_URL,Constants.AUTHORIZE_URL); } catch (Exception e) { Log.e(TAG, "Error creating consumer / provider",e); } Log.i(TAG, "Starting task to retrieve request token."); new OAuthRequestTokenTask(this,consumer,provider).execute(); }
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЙрд▓рдмреИрдХ URL рдорд┐рд▓рддрд╛ рд╣реИ (x-oauthflow-twitter: // callback)ред
@Override protected Void doInBackground(Void... params) { try { Log.i(TAG, "Retrieving request token from Google servers"); final String url = provider.retrieveRequestToken(consumer, Constants.OAUTH_CALLBACK_URL); Log.i(TAG, "Popping a browser with the authorize URL : " + url); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND); context.startActivity(intent); } catch (Exception e) { Log.e(TAG, "Error during OAUth retrieve request token", e); } return null; }
рд▓реЙрдЧрд┐рди рдкреЗрдЬ
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рд╣реИрдВред
рдмреНрд░рд╛рдЙрдЬрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ (рдкреНрд░рд┐рдкреНрд░рд░реЗрдХреНрдЯрдЯреЗрдХреНрдЯреЗрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА) рдХреЛ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ (AndroidManifest.xml) рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
<activity android:name=".PrepareRequestTokenActivity" android:launchMode="singleTask">>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="x-oauthflow-twitter" android:host="callback" />
</intent-filter>

рд╣рдо рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдпрд╣ рд░рд┐рдЯреНрд░реАрд╡реЗрдПрдЯрд╛рдХрд╛рдЙрдЯрдирдЯреИрд╕реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред OnNewIntent рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред
@Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final Uri uri = intent.getData(); if (uri != null && uri.getScheme().equals(Constants.OAUTH_CALLBACK_SCHEME)) { Log.i(TAG, "Callback received : " + uri); Log.i(TAG, "Retrieving Access Token"); new RetrieveAccessTokenTask(this,consumer,provider,prefs).execute(uri); finish(); } }
рдЕрдм рдЬрдм рд╕рдм рдХреБрдЫ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╕рддреНрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдордиреЗ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
@Override protected Void doInBackground(Uri...params) { final Uri uri = params[0]; final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); try { provider.retrieveAccessToken(consumer, oauth_verifier); final Editor edit = prefs.edit(); edit.putString(OAuth.OAUTH_TOKEN, consumer.getToken()); edit.putString(OAuth.OAUTH_TOKEN_SECRET, consumer.getTokenSecret()); edit.commit(); String token = prefs.getString(OAuth.OAUTH_TOKEN, ""); String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, ""); consumer.setTokenWithSecret(token, secret); context.startActivity(new Intent(context,AndroidTwitterSample.class)); executeAfterAccessTokenRetrieval(); Log.i(TAG, "OAuth - Access Token Retrieved"); } catch (Exception e) { Log.e(TAG, "OAuth - Access Token Retrieval Error", e); } return null; }
рдирд┐рд╖реНтАНрдХрд░реНрд╖ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНтАНрдХреНрд░рд┐рдп рдХрд┐рдП рдЧрдП TokenRetrieval рд╡рд┐рдзрд┐ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдирд┐рдХрд╛рд▓рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред
private void executeAfterAccessTokenRetrieval() { String msg = getIntent().getExtras().getString("tweet_msg"); try { TwitterUtils.sendTweet(prefs, msg); } catch (Exception e) { Log.e(TAG, "OAuth - Error sending to Twitter", e); } }
рдЦреИрд░, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЛрд╕реНрдЯ рд▓рд┐рдЦреЗрдВред
private final Handler mTwitterHandler = new Handler(); final Runnable mUpdateTwitterNotification = new Runnable() { public void run() { Toast.makeText(getBaseContext(), "Tweet sent !", Toast.LENGTH_LONG).show(); } };
рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ Twitter4J рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред
public static void sendTweet(SharedPreferences prefs,String msg) throws Exception { String token = prefs.getString(OAuth.OAUTH_TOKEN, ""); String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, ""); AccessToken a = new AccessToken(token,secret); Twitter twitter = new TwitterFactory().getInstance(); twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); twitter.setOAuthAccessToken(a); twitter.updateStatus(msg); }
рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:

рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓:
blog.doityourselfandroid.com/2011/02/13/guide-to-integrating-twitter-android-applicationрдЖрдЧреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рдеред
рдпрд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ -
рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ