AndroidアプリでUNIX timeを取得


○手っ取り早いけど、厳密な処理には向いていないやり方

Androidアプリ中でUNIXtimeを取得しようとするとき、たいていのサイトで

long utc = System.currentTimeMillis();

と、書いてあります。

それでも確かに間違いないんですが……これは端末で設定されている時間をもとに取得しているので、ユーザーさんが端末の時間設定をいじっちゃうと正しい時間が取得できないわけです。

アプリでunixtimeを使うのは、課金システムやゲームのポイントで不正を防ぐときによく使うので、これだと非常にマズいです。

 

 

○じゃあどうするの?

WEB通信して取得してきましょう!

まずは、↓のURLにアクセスしてみてください。

※このURLを使用するときのお願い

http://web.gucci1208.com/api/unixtime.php

白紙のページにただ1行、unixtimeらしき文字列が表示されたと思います。

 

1

ぽつーん

 

このPHPページはすごく単純で、unixtimeをPHP関数で取得してecho表示しているだけです。

※このURLを使用するときのお願い

<!--?php
// 現在のUnixタイムが表示されます
$unix_time = time();

echo $unix_time;
?-->

このページにAndroidアプリ上からアクセスして、正しいunixtimeを取得してきます!

 

 

○AndroidアプリでWEBからUNIXTIME取得

やり方はとても簡単で、↓のメソッドを呼び出せば、unixtimeの文字列が返ってきます。

気を付けるのは、このメソッドをメインスレッドで呼び出すとandroid.os.networkonmainthreadexceptionで落ちちゃうので、そこだけ注意してください。

※このURLを使用するときのお願い

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を使用するときのお願い)

このURLは誰でも使用できるように公開していますが、開発時のみ利用してください。

正式サービス開始時にはご自分のサーバーを使ってくださいね。

大量のアクセスは想定していないので……お願いしますm(__)m

それでもこのページが原因で高負荷がかかってしまうときは、URLを変更したり、ページを非公開にします。

AndroidアプリでUNIX timeを取得” への1件のコメント
  1. 匿名 より:

    参考になりました!
    ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください