Facebook連携もついでに書き書き。
まず~
1.facebook-android-sdkのダウンロード。
2.Facebook developerにアプリ登録。
この時のApp IDをメモ。
ネイティブAndroidアプリのチェックを選択し、「Android Key Hash」を入力
※Android Key Hashは、以下のコマンドを入力して生成。
keytool -list -keystore keystoreパス (ちなみに私はmac)
3.facebook-android-sdkをプロジェクトに組み込む
コード~
public class facebookPost extends Activity {
private static final String ApiKey = "xxxxx"; App ID
private static final String TOKEN = "access_token";
private static final String EXPIRES = "expires_in";
private Facebook facebook = null;
private AsyncFacebookRunner asyncFbRunner = null;
private SharedPreferences mPrefs;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
facebook = new Facebook(ApiKey);
asyncFbRunner = new AsyncFacebookRunner(facebook);
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
String expires = mPrefs.getString("access_expires", null);
if(access_token != null) {
facebook.setAccessToken(access_token);
}
if(expires != null) {
facebook.setAccessExpiresIn(expires);
}
submit_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//認証済みかチェック
if(facebook.isSessionValid()){
Toast.makeText(facebookPost.this, "facebook:投稿中...", Toast.LENGTH_SHORT).show();
CharSequence postStr = post_txt.getText();
Bundle params = new Bundle();
params.putString("message",postStr.toString());
asyncFbRunner.request("feed",params,"POST", new PostRequestListener(), null);
return;
}
Bundle params = new Bundle();
params.putString("scope","publish_stream");
facebook.dialog(facebookPost.this, "oauth", params, new DialogListener(){
/*facebook.authorize(facebookPost.this
, new String[] {"publish_stream"}
, new DialogListener(){*/
@Override
public void onComplete(Bundle values) {
// ログイン完了後の処理
Toast.makeText(facebookPost.this, "facebook:投稿中...", Toast.LENGTH_SHORT).show();
//facebook.dialogを使う場合は自分でsetAccessToken,setAccessExpiresInしてやらないといけないみたい
facebook.setAccessToken(values.getString(TOKEN));
facebook.setAccessExpiresIn(values.getString(EXPIRES));
SharedPreferences.Editor editor = mPrefs.edit();
Log.d("token",values.getString(TOKEN));
editor.putString("access_token", values.getString(TOKEN));
editor.putString("access_expires", values.getString(EXPIRES));
editor.commit();
CharSequence postStr = post_txt.getText();
Bundle params = new Bundle();
params.putString("message",postStr.toString());
asyncFbRunner.request("feed",params,"POST", new PostRequestListener(), null);
}
@Override
public void onFacebookError(FacebookError e) {
// Facebook側のエラー検知
Toast.makeText(facebookPost.this, "facebook:エラーが発生しました。"+e.getErrorCode(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(DialogError e) {
// 端末側エラー検知
Toast.makeText(facebookPost.this, "facebook:エラーが発生しました。", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
// ログインをキャンセルされた際の処理
}
});
}
});
}
public class PostRequestListener implements AsyncFacebookRunner.RequestListener{
@Override
public void onIOException(IOException e, Object state) {
// ネットワークエラー時に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
// 存在しないリソースにアクセスしようとした場合に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
// リクエストされたURLが無効だった場合に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onFacebookError(FacebookError e, Object state) {
// Facebook側でのエラー発生時に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onComplete(String response, Object state) {
// requestに対してresponseが返された場合に呼ばれる
toastCompleteHandlerThread();
}
}
private void toastCompleteHandlerThread() {
final HandlerThread ht = new HandlerThread("ToastThread");
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(facebookPost.this, "facebook:投稿しました。", Toast.LENGTH_SHORT).show();
}
});
}
private void toastErrorHandlerThread() {
final HandlerThread ht = new HandlerThread("ToastThread");
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(facebookPost.this, "facebook:投稿に失敗しました。", Toast.LENGTH_SHORT).show();
}
});
}
}
まず~
1.facebook-android-sdkのダウンロード。
2.Facebook developerにアプリ登録。
この時のApp IDをメモ。
ネイティブAndroidアプリのチェックを選択し、「Android Key Hash」を入力
※Android Key Hashは、以下のコマンドを入力して生成。
keytool -list -keystore keystoreパス (ちなみに私はmac)
3.facebook-android-sdkをプロジェクトに組み込む
コード~
public class facebookPost extends Activity {
private static final String ApiKey = "xxxxx"; App ID
private static final String TOKEN = "access_token";
private static final String EXPIRES = "expires_in";
private Facebook facebook = null;
private AsyncFacebookRunner asyncFbRunner = null;
private SharedPreferences mPrefs;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
facebook = new Facebook(ApiKey);
asyncFbRunner = new AsyncFacebookRunner(facebook);
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
String expires = mPrefs.getString("access_expires", null);
if(access_token != null) {
facebook.setAccessToken(access_token);
}
if(expires != null) {
facebook.setAccessExpiresIn(expires);
}
submit_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//認証済みかチェック
if(facebook.isSessionValid()){
Toast.makeText(facebookPost.this, "facebook:投稿中...", Toast.LENGTH_SHORT).show();
CharSequence postStr = post_txt.getText();
Bundle params = new Bundle();
params.putString("message",postStr.toString());
asyncFbRunner.request("feed",params,"POST", new PostRequestListener(), null);
return;
}
Bundle params = new Bundle();
params.putString("scope","publish_stream");
facebook.dialog(facebookPost.this, "oauth", params, new DialogListener(){
/*facebook.authorize(facebookPost.this
, new String[] {"publish_stream"}
, new DialogListener(){*/
@Override
public void onComplete(Bundle values) {
// ログイン完了後の処理
Toast.makeText(facebookPost.this, "facebook:投稿中...", Toast.LENGTH_SHORT).show();
//facebook.dialogを使う場合は自分でsetAccessToken,setAccessExpiresInしてやらないといけないみたい
facebook.setAccessToken(values.getString(TOKEN));
facebook.setAccessExpiresIn(values.getString(EXPIRES));
SharedPreferences.Editor editor = mPrefs.edit();
Log.d("token",values.getString(TOKEN));
editor.putString("access_token", values.getString(TOKEN));
editor.putString("access_expires", values.getString(EXPIRES));
editor.commit();
CharSequence postStr = post_txt.getText();
Bundle params = new Bundle();
params.putString("message",postStr.toString());
asyncFbRunner.request("feed",params,"POST", new PostRequestListener(), null);
}
@Override
public void onFacebookError(FacebookError e) {
// Facebook側のエラー検知
Toast.makeText(facebookPost.this, "facebook:エラーが発生しました。"+e.getErrorCode(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(DialogError e) {
// 端末側エラー検知
Toast.makeText(facebookPost.this, "facebook:エラーが発生しました。", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
// ログインをキャンセルされた際の処理
}
});
}
});
}
public class PostRequestListener implements AsyncFacebookRunner.RequestListener{
@Override
public void onIOException(IOException e, Object state) {
// ネットワークエラー時に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
// 存在しないリソースにアクセスしようとした場合に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
// リクエストされたURLが無効だった場合に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onFacebookError(FacebookError e, Object state) {
// Facebook側でのエラー発生時に呼ばれる
toastErrorHandlerThread();
}
@Override
public void onComplete(String response, Object state) {
// requestに対してresponseが返された場合に呼ばれる
toastCompleteHandlerThread();
}
}
private void toastCompleteHandlerThread() {
final HandlerThread ht = new HandlerThread("ToastThread");
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(facebookPost.this, "facebook:投稿しました。", Toast.LENGTH_SHORT).show();
}
});
}
private void toastErrorHandlerThread() {
final HandlerThread ht = new HandlerThread("ToastThread");
ht.start();
Handler h = new Handler(ht.getLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(facebookPost.this, "facebook:投稿に失敗しました。", Toast.LENGTH_SHORT).show();
}
});
}
}