○手っ取り早いけど、厳密な処理には向いていないやり方
Androidアプリ中でUNIXtimeを取得しようとするとき、たいていのサイトで
long utc = System.currentTimeMillis();
と、書いてあります。
それでも確かに間違いないんですが……これは端末で設定されている時間をもとに取得しているので、ユーザーさんが端末の時間設定をいじっちゃうと正しい時間が取得できないわけです。
アプリでunixtimeを使うのは、課金システムやゲームのポイントで不正を防ぐときによく使うので、これだと非常にマズいです。
○じゃあどうするの?
WEB通信して取得してきましょう!
まずは、↓のURLにアクセスしてみてください。
http://web.gucci1208.com/api/unixtime.php
白紙のページにただ1行、unixtimeらしき文字列が表示されたと思います。
ぽつーん
このPHPページはすごく単純で、unixtimeをPHP関数で取得してecho表示しているだけです。
<!--?php // 現在のUnixタイムが表示されます $unix_time = time(); echo $unix_time; ?-->
このページにAndroidアプリ上からアクセスして、正しいunixtimeを取得してきます!
○AndroidアプリでWEBからUNIXTIME取得
やり方はとても簡単で、↓のメソッドを呼び出せば、unixtimeの文字列が返ってきます。
気を付けるのは、このメソッドをメインスレッドで呼び出すとandroid.os.networkonmainthreadexceptionで落ちちゃうので、そこだけ注意してください。
public static String ReturnResultPosta() { String result = ""; HttpGet request = new HttpGet("http://web.gucci1208.com/api/unixtime.php"); HttpResponse httpResponse = null; try { httpResponse = new DefaultHttpClient().execute(request); } catch (Exception e) { Log.d("HttpSampleActivity", "Error Execute:" + e); //ここに来ちゃったら正常にとれていないので return ""; } int status = httpResponse.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == status) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); httpResponse.getEntity().writeTo(outputStream); result = outputStream.toString(); } catch (Exception e) { Log.d("HttpSampleActivity", "Error"); } } else { Log.d("HttpSampleActivity", "Status" + status); } return result; }
これで(ほぼ)正しいunixtimeを取得できます!!
このURLは誰でも使用できるように公開していますが、開発時のみ利用してください。
正式サービス開始時にはご自分のサーバーを使ってくださいね。
大量のアクセスは想定していないので……お願いしますm(__)m
それでもこのページが原因で高負荷がかかってしまうときは、URLを変更したり、ページを非公開にします。
参考になりました!
ありがとうございます!