Skip to content

Instantly share code, notes, and snippets.

@anzfactory
Last active November 7, 2015 14:50
Show Gist options
  • Save anzfactory/3c466fdf1229a5d7231e to your computer and use it in GitHub Desktop.
Save anzfactory/3c466fdf1229a5d7231e to your computer and use it in GitHub Desktop.
JavaライブラリのjInstagramを使用してInstagram認証のサンプル
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();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment