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

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

Web画面上からタイムアウトをイベントとして受信できます。 イベントを受け取ることで、タイムアウト発生時にネイティブアプリケーション側で必要な後処理ができます。

注意

Web画面上からタイムアウトをイベントとして受信する方法は、AndroidとiOSに対応しています。
実装方法
サーバアプリケーション
  • 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];
}