|
public class JInstagramAuthorizedActivity extends ActionBarActivity { |
|
|
|
private static final String INSTAGRAM_CLIENT_ID = "client_id"; |
|
private static final String INSTAGRAM_SECRET = "secret"; |
|
private static final String INSTAGRAM_CALLBACK_URL = "http://hogehoge.com/callback"; |
|
private static final Token EMPTY_TOKEN = null; |
|
|
|
private InstagramService mInstagramService; |
|
private SharedPreferences mSharedPreferences; |
|
|
|
/** |
|
* Instagramへの認証 |
|
*/ |
|
private void authorized() { |
|
|
|
// 認証済みか? |
|
mSharedPreferences = getSharedPreferences("pref_name", Activity.MODE_PRIVATE); |
|
String accessToken = mSharedPreferences.getString("ACCESS_TOKEN_INSTAGRAM", ""); |
|
String userId = mSharedPreferences.getString("UID_INSTAGRAM", ""); |
|
if ( ! "".equals(accessToken) && ! "".equals(userId)) { |
|
// すでに認証済みなので取得処理とかに行く |
|
// 利用のしかたはこんな感じ |
|
// Token token = new Token(accessToken, INSTAGRAM_SECRET); |
|
// Instagram instagram = new Instagram(token); |
|
// instagram.getUserFeeds(); // 認証ユーザーのフィード情報取得 |
|
return; |
|
} |
|
|
|
WebView webViewAuthorized = (Webview) findViewById(R.id.webview_authorized); |
|
final Context con = this; |
|
|
|
// webviewの準備(?code=XXXXXXXXXを取るとために) |
|
webViewAuthorized.setWebViewClient(new WebViewClient() { |
|
@Override |
|
public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
// 認証が無事成功したら指定したcallback urlに戻ってくるのでcallback urlでチェック |
|
if (url.indexOf(INSTAGRAM_CALLBACK_URL) == 0) { |
|
// 今度はaccess tokenの取得処理 |
|
Uri uri = Uri.parse(url); |
|
String code = uri.getQueryParameter("code"); |
|
|
|
// access tokenの取得処理へ |
|
con.getAccessToken(code); |
|
|
|
return true; // callbackurlがダミーの場合は読み込んでも意味ないので trueを返す |
|
} |
|
return false; |
|
|
|
} |
|
}); |
|
|
|
// 認証用のurlを作る |
|
mInstagramService = new InstagramService() |
|
.apiKey(INSTAGRAM_CLIENT_ID) |
|
.apiSecret(INSTAGRAM_SECRET) |
|
.callback(INSTAGRAM_CALLBACK_URL) |
|
.build(); |
|
String authorizeUrl = instagramService.getAuthorizationUrl(EMPTY_TOKEN); |
|
|
|
// 認証画面の表示 |
|
webViewAuthorized.loadUrl(authorizeUrl); |
|
|
|
} |
|
|
|
/** |
|
* アクセストークン取得 |
|
* @param code Instagram認証後にcallbackurlに付随されてくるcode=の値 |
|
*/ |
|
private void getAccessToken(String code) { |
|
Verifier verifier = new Verifier(code); |
|
Token accessToken = mInstagramService.getAccessToken(EMPTY_TOKEN, verifier); |
|
|
|
// access toke取得した際にuser idも返ってくるはずなので |
|
// 返ってきたresponseを分解して取得 |
|
// Tokenクラスを利用して簡単に取りたいけど、なさ気? |
|
String userId = ""; |
|
try { |
|
JSONObject json = new JSONObject(accessToken.getRawResponse()); |
|
JSONObject user = json.getJSONObject("user"); |
|
userId = user.getString("id"); |
|
} catch (JSONException e) { |
|
e.printStackTrace(); |
|
} |
|
|
|
// Preferenceに保存しとく |
|
Editor e = mSharedPreferences.edit(); |
|
e.putString("ACCESS_TOKEN_INSTAGRAM", accessToken.getToken()); |
|
e.putString("UID_INSTAGRAM", userId); |
|
e.commit(); |
|
} |
|
} |