ページの先頭行へ戻る
Interstage Mobile Application Server V1.1.0 アプリケーション開発ガイド
FUJITSU Software

9.5 Web画面上からイベントとして受信する方法

Web画面上からタイムアウトをイベントとして受信することもできます。

イベントを受け取ることで、タイムアウト発生時にネイティブアプリケーション側で必要な後処理を行うことができるようになります。

実装方法

サーバアプリケーション

・Cordova APIを使用してコンテンツの読み込み時にタイムアウトのイベントを通知するコンテンツを返すように実装します。この場合も任意のコンテンツを返す方法と同様にステータスコード:200を返すようにしてください。

Android

・CordovaActivityクラスのonMessageメソッド内で"IMAPS_EVENT_AUTH_TIMEOUT_ERROR"イベントを受け取るよう実装します。

iOS

・IMAAuthViewControllerを継承し、IMAAuthViewControllerDelegateのdidFailLoadWithErrorメソッドを実装します。

以下サーバアプリケーションのコンテンツの配置例です。

Timeout
+-- timeout.jsp
+-- js
    +-- android
        +-- cordova.js
    +-- ios
        +-- cordova.js

cordova.jsは以下に保管されているものをコピーしてサーバアプリケーションに含めてください。

また、cordova.jsの配置先には認証が有効にならないようにimadmin auth importコマンドで設定してください。

Android

    Windows版サーバの場合:

        <製品インストールフォルダー>\development\android\cordovajs\cordova.js

    Linux版サーバの場合:

        /opt/FJSVimsrv/development/android/cordovajs/cordova.js

iOS

    Windows版サーバの場合:

        <製品インストールフォルダー>\development\ios\cordovajs\cordova.js

    Linux版の場合:

        /opt/FJSVimsrv/development/ios/cordovajs/cordova.js

上記ディレクトリからcordova.jsをコピーします。

タイムアウトを通知するサーバアプリケーションのコンテンツの実装例(timeout/timeout.jsp)

<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" %>
<%
  response.setHeader("X-IMAPS-TIMEOUT", "true");
  response.setStatus(200);
%>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>401 Unauthorized</title>
	<script type="text/javascript">
		var require;
		if(/Android/i.test(navigator.userAgent)){
			require = "<%=request.getContextPath()%>\/timeout\/js\/android\/cordova.js";
		} else {
			require = "<%=request.getContextPath()%>\/timeout\/js\/ios\/cordova.js";
		}
		document.write('<scr'+'ipt type="text/javascript" src="'+require+'" onload="onLoad()"><\/scr'+'ipt>');

		function onLoad() {
			document.addEventListener("deviceready",
			function () {
				cordova.exec(false, false, "AuthPlugin", "unauthorized", []);
			}, false);
		}
	</script>
</head>
<body>
	<b>401 Unauthorized</b><br>
</body>
</html>

Androidでの実装例

public class WebViewActivity extends CordovaActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Config.init(this);
        init();
        super.loadUrl(Config.getStartUrl());
    }
    @Override
    public Object onMessage(String id, Object data) {
        if(id.equals("IMAPS_EVENT_AUTH_TIMEOUT_ERROR")) {
            new AlertDialog.Builder(this)
            .setTitle("Timeout")
            .setMessage("タイムアウトが発生しました")
            .setPositiveButton("OK", null)
            .create()
            .show();
        }
        return super.onMessage(id, data);
    }
}

iOSでの実装例

#pragma mark IMAAuthViewControllerDelegate implementation

- (void) didFailLoadWithError:(NSError *)anError
{
    NSString *message = [self getErrorMsg:anError];
    NSLog(@"didFailLoadWithError %@", message);
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:@"Timeout"
                          message:@"タイムアウトが発生しました"
                          delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    [alert show];
}