どれも必要なキーワードなので、入れてみたのですが、
もう少し短くしたかったです。
今回はいよいよコーディングへ入ります。
2つの.jarファイルはダウンロードしましたか?
Build Pathへはちゃんと指定されていますか?
Client IDとClient Secretは記録されていますか?
準備が整いましたら、続きを読んで下さい。
今回は1つのActivityしか使用しないので、
onCreateでいきなりブラウザへリダイレクトをかけましょう。
MainActivity.java
public class MainActivity extends Activity {
private static final String CLIENT_ID = "xxxxxxxx";
private static final String CLIENT_SECRET = "xxxxxxxx";
private static final String SCOPE = "https://www.googleapis.com/auth/xxxxxxx";
private static final String REQUEST_URL = "https://www.google.com/accounts/OAuthGetRequestToken?scope=";
private static final String ACCESS_URL = "https://www.google.com/accounts/OAuthGetAccessToken";
private static final String AUTHORIZE_URL = "https://www.google.com/accounts/OAuthAuthorizeToken?hd=default";
private static final String CALLBACK = "myapp://callback";
private OAuthConsumer consumer;
private OAuthProvider provider;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
consumer = new CommonsHttpOAuthConsumer(CLIENT_ID, CLIENT_SECRET);
provider = new CommonsHttpOAuthProvider(REQUEST_URL + SCOPE, ACCESS_URL, AUTHORIZE_URL);
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACK)) {
final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
provider.retrieveAccessToken(consumer, oauth_verifier);
Log.d("ACCESS_TOKEN", consumer.getToken());
Log.d("ACCESS_TOKEN_SECRET", consumer.getTokenSecret());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
では解説をいたします。
まず、SCOPEは用意されているGoogle APIごとに違います。
使用するAPIで調べて下さい。
signpostの使用として、customerとproviderを使用します。
宣言の仕方はonCreate内のように書きます。
CALLBACKには、Manifest.xmlで指定したschemeとhostから出来る文字列を指定します。
これで、ブラウザが"myapp://callback"というデータを紐づけたIntentを発行します。
provider.retrieveRequestToken(consumer, CALLBACK);
で、IDとパスワードを入力する為のページへのURLを作成します。
これをデータとして紐づけてIntentを発行しております。
これでブラウザが立ち上がります。
ブラウザで、IDとパスワードを入力すると、APIのアクセス許可をユーザに求めます。
許可を押すと、myapp://callbackへジャンプします。
この際、引数としてtoken等を保持しています。
myapp://callbackは通常のURLではありませんので、
AndroidのIntentManagerは受け取れるアプリを探します。
ここで、このアプリが受け取ると、onNewIntent(Intent intent)を実行します。
onNewIntentでtokenを解析して、
ACCESS_TOKENとACCESS_TOKEN_SECRETを取得します。
この2つのTOKENが取得できれば、
あとはこの2つを常にAPIに紐づけて引数として与えればアクセス出来るようになります。
何か例を書きたいですね。
いつか書いておきます。
よろしくお願いします。
0 件のコメント:
コメントを投稿