本明細書では、アプリケーションプログラム(以下、「アプリ」とする)を具体化した実施の形態について、添付図面を参照しつつ詳細に説明する。本形態は、パーソナルコンピュータ(以下、「PC」とする)にて実行可能なスキャンアプリを開示するものである。
本形態のPC1は、図1に示すように、スキャナ2と接続され、スキャナ2から画像データを受信する。PC1は、情報処理装置の一例である。PC1は、各種のプログラムの実行が可能な装置である。PC1に代えて、例えば、タブレットコンピュータ、スマートフォンであってもよい。スキャナ2は、原稿を読み取って画像データを取得し、取得した画像データをPC1に送信する。PC1に接続されるスキャナ2は、1台に限らず、複数台でも良い。また、PC1には、スキャナに限らず、コピー機、複合機、FAX装置、デジタルカメラ等、画像データを取得して送信できる装置が接続されていればよい。
本形態のPC1は、図1に示すように、インターネット100に接続され、インターネット100を介して、クラウドサーバ101と、クラウドサーバ102と、に接続される。つまり、PC1のユーザは、PC1を使用して、インターネット100を介して提供される各種のクラウドサービスを利用できる。
各クラウドサービスは、1以上のストレージサーバや認証用サーバを管理し、管理するストレージサーバへのデータのアップロードやダウンロードのサービスを提供する。ストレージサーバの1つが認証サーバを兼ねていても良い。以下では、1つのクラウドサービスにて管理されるストレージサーバや認証用サーバを区別せず、まとめて「クラウドサーバ」と呼ぶ。なお、図1では、PC1に2つのクラウドサーバ101、102が接続されている状態を例示しているが、アクセス可能なクラウドサーバの数はさらに多く、実際に接続されるクラウドサーバの数は限定されない。
本形態のPC1は、図1に示すように、CPU11と、ROM12と、RAM13と、不揮発性メモリ14と、を含む制御基板10を備えている。さらに、タッチパネル15と、ネットワーク通信インタフェース(以下、「IF」とする)16と、USB-IF17と、を備え、これらが制御基板10に電気的に接続されている。CPU11は、コンピュータの一例である。
ROM12には、MFP100を起動するための起動プログラム等が記憶されている。RAM13は、各種の処理が実行される際の作業領域として、あるいは、データを一時的に記憶する記憶領域として利用される。不揮発性メモリ14は、例えば、HDD、フラッシュメモリであり、各種のプログラムや画像データ等のデータや各種設定を記憶する領域として利用される。
CPU11は、ROM12や不揮発性メモリ14から読み出したプログラムに従って、また、ユーザの指示に基づいて、各種の処理を実行する。なお、図1中の制御基板10は、PC1の制御に利用されるハードウェアやソフトウェアを纏めた総称であって、実際にPC1に存在する単一のハードウェアを表すとは限らない。
タッチパネル15は、ユーザによる操作を受け付けるとともに情報の表示を行うハードウェアである。すなわち、タッチパネル15は、入力機能と出力機能との両方を備えるユーザインタフェースの一例である。ユーザインタフェースは、タッチパネル15に限らず、ディスプレイとキーボードやマウスとの組み合わせを備えるものであっても良い。
ネットワーク通信IF16は、インターネット100を介して外部装置と通信を行うためのハードウェアを含む。ネットワーク通信IF16の通信方式は、無線でも有線でもよく、LAN、Wi-Fi(登録商標)など、どのような規格の方式でもよい。また、USB-IF17は、スキャナ2との通信を行うためのハードウェアを含む。なお、ネットワーク通信IF16を介して接続されるスキャナがあっても良い。
PC1の不揮発性メモリ14には、オペレーティングシステム(以下、「OS」とする)40と、スキャンアプリ41と、ブラウザ42と、を含む、各種のプログラムが記憶されている。スキャンアプリ41は、ユーザの指示に基づいて、スキャナ2との通信を行い、スキャナ2への読み取り設定や読み取り実行の指示等の送信、スキャナ2にて読み取った画像データの受信や表示、受信した画像データの保存等を行うプログラムである。ブラウザ42は、ウェブページを表示するプログラムである。OS40の一部は、ROM12に含まれていてもよい。
スキャンアプリ41が記憶される媒体は、不揮発性メモリ14に限らない。スキャンアプリ41が記憶される媒体は、コンピュータが読み取り可能なストレージ媒体であってもよい。コンピュータが読み取り可能なストレージ媒体とは、non-transitoryな媒体である。non-transitoryな媒体には、上記の例の他に、CD-ROM、DVD-ROM等の記録媒体も含まれる。また、non-transitoryな媒体は、tangibleな媒体でもある。一方、インターネット上のサーバなどからダウンロードされるプログラムを搬送する電気信号は、コンピュータが読み取り可能な媒体の一種であるコンピュータが読み取り可能な信号媒体であるが、non-transitoryなコンピュータが読み取り可能なストレージ媒体には含まれない。
続いて、スキャンアプリ41の動作について説明する。なお、以下の説明における処理およびフローチャートの各処理ステップは、基本的に、スキャンアプリ41などのプログラムに記述された命令に従ったCPU11の処理を示す。すなわち、以下の説明における「判断」、「取得」、「受付」、「制御」等の処理は、CPU11の処理を表している。CPU11による処理は、PC1のOS40の他のモジュールとデータ交換するためのIF(APIとも呼ばれる)を用いたハードウェア制御も含む。本明細書では、OS40の記載を省略して各プログラムの動作を説明する。すなわち、以下の説明において、「プログラムPがハードウェアHを制御する」という趣旨の記載は、「プログラムPがOS40のAPIを用いてハードウェアHを制御する」ことを指してもよい。なお、「取得」は要求を必須とはしない概念で用いる。すなわち、CPU11が要求することなくデータを受信するという処理も、「CPU11がデータを取得する」という概念に含まれる。また、本明細書中の「データ」とは、コンピュータに読取可能なビット列で表される。そして、実質的な意味内容が同じでフォーマットが異なるデータは、同一のデータとして扱われるものとする。本明細書中の「情報」についても同様である。また、「要求する」、「指示する」とは、要求していることを示す情報や、指示していることを示す情報を相手に出力することを示す概念である。また、要求していることを示す情報や指示していることを示す情報のことを、単に、「要求」、「指示」とも記載する。
また、プログラムに記述された命令に従ったCPU11の処理を、省略した文言で記載することがある。例えば、「CPU11が行う」、「スキャンアプリ41が行う」のように記載することがある。また、CPU11による処理であって、情報Aが事柄Bであることを示しているか否かを判断する処理を、「情報Aから、事柄Bであるか否かを判断する」のように概念的に記載することがある。また、CPU11による処理であって、情報Aが事柄Bであることを示しているか、事柄Cであることを示しているかを判断する処理を、「情報Aから、事柄Bであるか事柄Cであるかを判断する」のように概念的に記載することがある。
本形態のスキャンアプリ41は、起動の指示を受け付けると、タッチパネル15にアプリ用のウィンドウを表示させ、ユーザの操作を受け付ける。スキャンアプリ41は、ユーザの指示に基づいて、例えば、スキャナ2に原稿の画像を読み取らせ、スキャナ2から画像データを受信して、受信した画像データを指定された保存場所に保存する。以下、図2~図8を参照して、画像データをクラウドサーバへアップロードする手順について説明する。
図2は、画像データの保存の指示を受け付けた場合に、スキャンアプリ41が表示させるアプリ用ウィンドウ411の例を示している。図2では、アプリ用ウィンドウ411のスキャン画像領域81に、スキャナ2から受信した画像データの画像が含まれている。また、保存先の選択肢として、「PCへの保存」ボタン82と、「クラウドサービスへの保存」ボタン83と、「アプリで開く」ボタン84と、が含まれている。そして、スキャンアプリ41は、各ボタン82~84への操作を受け付ける。
スキャンアプリ41は、ボタン83への操作を受け付けた場合に、アップロード先のクラウドサーバの選択を受け付けるクラウド選択ウィンドウ412を表示させる。図3は、クラウド選択ウィンドウ412の例を示している。クラウド選択ウィンドウ412は、アプリ用ウィンドウ411の前面に表示される。
図3では、クラウドサーバの選択肢として、「クラウドA」ボタン85と、「クラウドB」ボタン86と、が表示され、「クラウドA」が選択されている状態の例を示している。クラウドサーバは、それぞれ個別の管理システムを備えている。そのため、クラウドサーバに画像データをアップロードする場合には、スキャンアプリ41は、選択されたクラウドサーバの規定に則って認証を受け、認証情報を取得する必要がある。クラウド選択ウィンドウ412には、図3に示すように、クラウドサーバごとの「サインイン」ボタン851、861も表示されている。
スキャンアプリ41は、クラウド選択ウィンドウ412にて、例えば、ボタン85の操作によってクラウドサーバの選択を受け付け、さらに、ボタン851の操作によってサインインの指示を受け付けると、認証情報を取得するための手続を開始する。なお、ボタン851は、そのクラウドサーバへの「サインイン」の指示を受け付けるボタンであり、そのクラウドサーバへ現在サインインしていない、すなわち、サインアウト状態であることを示す機能も兼ねている。
クラウドサーバでは、例えば、OAuth2.0を用いた認証方式が採用されている。OAuth2.0を用いた認証方式では、例えば、図4のシーケンス図に示す手順で、認証情報であるアクセストークンを取得する。図4では、クラウドサーバへのアカウントを作成済みのユーザによって、クラウドサーバへの認証を要求する場合の手順を示している。なお、クラウドAは、クラウドサーバにて実行されるプログラムである。
図3に示したボタン851への操作を受け付けた場合、スキャンアプリ41は、図4に示すように、クラウドAへのサインイン手順を実行する。スキャンアプリ41は、サインインの指示を受け付ける(手順51)と、まず、ローカルサーバ43を起動し(手順52)、さらに、ブラウザ42を起動する(手順53)。
ローカルサーバ43は、PC1自身を、ローカルホストのウェブサーバとして動作させるプログラムである。ローカルホストのウェブサーバとは、ウェブサーバが動作している装置の内部で動作し、クライアントから利用できるように設定されたウェブサーバである。すなわち、ローカルサーバ43は、インターネット100に公開されているウェブサーバがブラウザとHTTP通信をすると同様に、ブラウザ42とPC1内部で、HTTP通信をすることができる。
スキャンアプリ41は、図4の手順53にて、ブラウザ42に、アクセスしようとしているクラウドサーバの認証ページのURLと、リダイレクト先としてのローカルサーバ43のURLとを指示する。選択可能な各クラウドサーバの認証ページのURLは、予めスキャンアプリ41に登録されている。スキャンアプリ41は、選択されたクラウドサーバの認証ページのURLを読み出して、ブラウザ42の起動オプションに設定する。
図4の手順53にてブラウザ42が起動されることで、ブラウザ42は、クラウドAに認証手続の開始要求を送信し(手順54)、クラウドAから認証ページのウェブページデータを受信する(手順55)。以下、ページを示すウェブページデータのことを、単に、「ページ」とも記載する。ブラウザ42は、例えば、図5に示すように、クラウドAの認証ページを含むブラウザ表示画面421をタッチパネル15に表示させる。クラウドサーバの認証ページは、認証画面の一例である。
なお、クラウドサーバは、送信元のアプリの登録情報を表示するサービスを提供している場合がある。例えば、スキャンアプリ41の製造メーカが、予めクラウドサーバのサービス事業者に、アプリの名称やアプリのアイコンなどの登録情報を、スキャンアプリ41の識別情報と対応付けて登録するよう申請しておくことで、サービス事業者は、クラウドサーバに登録情報を登録する。クラウドサーバは、認証手続の開始時にスキャンアプリ41の識別情報を受信すると、対応する登録情報を含むウェブページデータをブラウザ42に送信する。これにより、図5に示すように、認証ページにスキャンアプリ41に関する情報、例えば、アプリの名称やアプリのアイコン91が表示される。アプリのアイコン91は、アプリ情報の一例であり、スキャンアプリ41の識別情報は、コマンドの一例である。
クラウドAの認証ページには、例えば、図5に示すように、IDの入力欄92と、パスワードの入力欄93と、ログインボタン94と、が表示される。そして、ブラウザ42は、図4に示すように、表示中の認証ページにて、認証要求情報の入力操作を受け付ける(手順56)。認証要求情報は、例えば、IDやメールアドレスとパスワードとの組であり、ユーザによって予めクラウドAに登録されたアカウントの情報である。さらに、ブラウザ42は、認証要求情報が入力された状態で、図5に示したログインボタン94への操作を受け付けると、図4に示すように、入力された認証要求情報をクラウドAに送信し、認証を要求する(手順57)。
なお、認証ページでは、アカウントの作成のためのボタンが表示される場合もある。アカウントを未作成のユーザは、例えば、認証ページからアカウント作成のページへと移動することで、アカウントを作成してから認証手順を実行することになる。また、ブラウザ42は、キャッシュ機能を有し、過去に入力されたIDやパスワードの情報を保存している場合がある。ブラウザ42は、キャッシュ情報を参照して、IDの入力欄92とパスワードの入力欄93とに初期情報を表示させてもよい。そして、ブラウザ42がキャッシュ情報を有している場合には、手順56の入力操作を省略して、手順57でのログインボタン94への操作を受け付けても良い。
クラウドAは、認証要求情報に基づいて認証処理を行う(手順58)。そして、認証処理の後、認証可能である場合、クラウドAは、ブラウザ42へ確認ページを送信する(手順59)。確認ページの例を図6に示す。ブラウザ42は、確認ページを受信したら、ブラウザ表示画面421に確認ページを表示する。確認ページには、図6に示すように、キャンセルボタン95と、許可ボタン96と、許可ボタン96を操作することで認証が正常に完了することを示す文字列と、が表示される。そして、ブラウザは、確認ページの各ボタン95、96への操作を受け付ける。
図4に示すように、ブラウザ42は、許可ボタン96の操作を受け付けたら(手順60)、許可情報をクラウドAに送信する(手順61)。クラウドAは、許可情報を受けて、認可コードとリダイレクト先の情報とをブラウザ42へ送信する(手順62)。手順62にて送信されるリダイレクト先の情報は、手順53にて指定されたローカルサーバ43のURLである。
なお、クラウドAへの認証手続き中にエラーが発生した場合や、図6に示した確認ページにてキャンセルボタン95への操作を受け付けた場合、クラウドAは、認可コードを送信しない。この場合、ブラウザ42は、手順62にて、エラーの情報、または、キャンセルの情報を受信する。
ブラウザ42は、クラウドAから受信した情報に基づいて、ローカルサーバ43のURLにリダイレクトする(手順63)。つまり、ブラウザ42は、ローカルサーバ43に対して、表示するウェブページの情報を渡すように要求するリダイレクト要求を行う。リダイレクト要求では、ブラウザ42は、クラウドAから受信した情報をローカルサーバ43に渡す。手順63にてローカルサーバ43に渡される情報には、例えば、クラウドAの認可コード、エラーの情報、キャンセルの情報がある。
ローカルサーバ43は、手順63にて受信したリダイレクト要求に認可コードが含まれているか否かを判断する(手順64)。ローカルサーバ43は、図4に示すように、認可コードが含まれていると判断した場合、受け取った認可コードをクラウドAに送信する(手順65)。クラウドAは、認可コードを受信すると、認可コードの送信元であるローカルサーバ43へアクセストークンとリフレッシュトークンとの組を送信する(手順66)。これで、クラウドAへの認証手続は完了であり、ローカルサーバ43は、アクセストークンとリフレッシュトークンとの組を受信したことで、認証に成功したと判断する。
ローカルサーバ43は、認証に成功した場合、認証結果を示す完了画面である認証完了画面のデータを取得する(手順67)。具体的には、例えば、図7に示すような認証完了画面98の場合、PC1は、ウェブページの構成を示すデータと、ページ内に表示される各部品(例えば、図7中の符号981~984で示すもの)のデータとを、ローカルサーバ43やスキャンアプリ41のプログラムファイル内、または、各プログラムから参照する参照ファイル内に所持している。ローカルサーバ43は、これらのデータを読み出し、組み合わせてウェブページデータを作成する。
そして、ローカルサーバ43は、ブラウザ42に認証完了画面のデータを渡して、その表示をブラウザ42に指示する(手順68)。このとき、ブラウザ42がアクティブな状態となり、ブラウザ表示画面421には、例えば、図7に示すように、認証完了画面98が表示される。図7に示す認証完了画面98は、認証が成功した場合にブラウザ42に表示させるウェブページであり、認証手続が完了したことをユーザに知らせるための完了画面である。認証完了画面98の詳細については、後述する。
さらに、ローカルサーバ43は、図4に示すように、受信したアクセストークンとリフレッシュトークンとの組をスキャンアプリ41に渡す(手順69)。スキャンアプリ41は、アクセストークンとリフレッシュトークンとを受け取った後、ローカルサーバ43を終了させる(手順70)。
スキャンアプリ41は、アクセストークンとリフレッシュトークンとを受け取ると、例えば、図8に示すように、クラウド選択ウィンドウ412に保存ボタン87を表示させる。また、ボタン85中に表示されていたボタン851(図3参照)は、図8に示すように、「サインアウト」の指示を受け付けるボタン852に変更される。ボタン852は、クラウドAへサインイン中であることを示す機能も兼ねている。スキャンアプリ41は、ボタン852に代えて、サインアウトを示すアイコン等、サインイン状態であることを示す間接的な情報を表示しても良い。
そして、スキャンアプリ41は、例えば、ユーザの操作によりアクティブな状態となる。また、スキャンアプリ41は、保存ボタン87への操作を受け付ける。スキャンアプリ41は、保存ボタン87への操作を受け付けると、スキャンアプリ41は、アクセストークンを添付して画像データを送信する(手順71)。これにより、画像データは、クラウドAのストレージサーバに保存される。
一方、手順64にて、リダイレクト要求に認可コードが含まれていないと判断した場合、ローカルサーバ43は、図4に示すように、認証が未完了であることを示す完了画面である未認証画面のデータを取得する(手順72)。そして、ローカルサーバ43は、ブラウザ42に未認証画面のデータを渡して、その表示をブラウザ42に指示する(手順73)。このとき、ブラウザ42がアクティブな状態となり、ブラウザ表示画面421には、未認証画面が表示される。未認証画面は、認証手続が未完了である場合にブラウザ42に表示させるウェブページであり、認証できなかったことをユーザに知らせるための完了画面である。
さらに、ローカルサーバ43は、未認証であることを示す情報をスキャンアプリ41に渡す(手順74)。スキャンアプリ41は、未認証であることを示す情報を受け取った後、ローカルサーバ43を終了させる(手順75)。
次に、認証完了画面98について説明する。認証完了画面98には、例えば、図7に示すように、カラーバー981と、認証完了の情報982と、操作指示情報983と、切り替えボタン984と、スキャンアプリ41のファビコン985と、が表示される。なお、これらを全て表示する必要はなく、少なくとも1つが表示されるとよい。カラーバー981、認証完了の情報982、操作指示情報983、切り替えボタン984、ファビコン985は、いずれも、スキャンアプリ41をアクティブな状態とすることを示す情報であり、特定情報の一例である。
カラーバー981は、図7に示すように、スキャンアプリ41のテーマ色の帯である。テーマ色は、例えば、アプリ用ウィンドウ411のタイトルバーに用いられている色、アプリ用ウィンドウ411の背景色である。テーマ色は、スキャンアプリ41に固有の色であり、OS40のテーマ色ではない。カラーバー981のみでなく、ページの背景色をテーマ色としたり、ページ中の文字をテーマ色で表示しても良い。スキャンアプリ41のテーマ色を使用したページとすることで、アクティブな状態にする対象がスキャンアプリ41であることをユーザに伝え易い。つまり、テーマ色のカラーバー981を表示させることで、間接的に、スキャンアプリ41をアクティブな状態とすることを示唆できる。
認証完了の情報982は、図7に示すように、認証手続が完了したことを示す文字情報である。操作指示情報983は、スキャンアプリ41の表示画面をアクティブな状態とすることを示す文字情報である。操作指示情報983には、例えば、図7に示すように、ブラウザ42を終了させるメッセージ983Aと、スキャンアプリ41の名称983Bと、が含まれる。操作指示情報983によって、ユーザに、ブラウザ42を終了させて、スキャンアプリ41の操作に戻る操作を促すことができる。
操作指示情報983にメッセージ983Aを含むことで、ブラウザ42をユーザによって終了させる必要があることがユーザに伝わり易い。また、操作指示情報983にスキャンアプリ41の名称983Bを明記することで、アクティブな状態とする対象がスキャンアプリ41であることをユーザに伝え易い。
なお、スキャンアプリ41は、複数の言語から使用する言語を選択し、例えば、アプリ用ウィンドウ411に表示される各種の文字情報を選択された言語での表記とする。そして、スキャンアプリ41は、認証完了画面として、使用可能な各言語によって認証完了の情報982や操作指示情報983を表記したページを有している。ローカルサーバ43は、手順67にて、認証完了画面の各ページのうち、スキャンアプリ41にて選択されている言語で表記されたページのデータを取得する。認証完了の情報982や操作指示情報983の文字情報を、スキャンアプリ41の使用言語と同じ言語で表記することで、ユーザにとって内容を把握し易い情報となる。
切り替えボタン984は、図7に示すように、スキャンアプリ41をアクティブな状態とする入力操作を受け付ける入力エリアである。例えば、認証完了画面98のページデータとして、切り替えボタン984のエリアが操作されたら実行されるJava(登録商標)スクリプトを含むものを用意する。具体的には、スキャンアプリ41の表示画面をアクティブな状態とするようにローカルサーバ43に指示するJavaスクリプトを、認証完了画面98のページデータに含ませる。そして、切り替えボタン984への操作を受け付けた場合、ブラウザ42が、そのJavaスクリプトを実行することで、ローカルサーバ43は、スキャンアプリ41をアクティブな状態とするコマンドをOS40に渡し、スキャンアプリ41の表示画面がアクティブな状態となる。
あるいは、ローカルサーバ43が、切り替えボタン984の領域への操作を受け付けたか否かを判断してもよい。そして、受け付けたと判断した場合に、ローカルサーバ43は、スキャンアプリ41をアクティブな状態とするようにOS40に指示してもよい。切り替えボタン984が表示されることで、スキャンアプリ41をアクティブな状態に戻す入力を認証完了画面98の中で受け付けられる。従って、ボタンの操作によって、容易に、表示が切り替えられる。なお、スキャンアプリ41をアクティブな状態とする切り替えボタン984に代えて、ブラウザ42を閉じるボタンを設けてもよい。
認証完了画面98のタブには、図7に示すように、スキャンアプリ41のファビコン985が含まれてもよい。ファビコンは、favorite iconの略称であり、ウェブサイトのシンボルマークを示すアイコンである。ブラウザ42は、タブやブックマークなどにファビコンを表示する。ローカルサーバ43は、ブラウザ42に、ファビコン985のデータを渡して表示させる。ファビコン985は、クラウドサーバのサービス事業者に登録を申請したアプリのアイコンのテイストを残したまま、小さく表示するために作成したアイコンであり、ローカルサーバ43やスキャンアプリ41は、このファビコン985と同様の画像をアイコンとして使用する。
ファビコン985の表示によっても、アクティブな状態にする対象がスキャンアプリ41であることをユーザに伝え易い。そして、認証完了画面98のタブにスキャンアプリ41のファビコン985が含まれることで、間接的に、スキャンアプリ41をアクティブな状態とすることを示唆できる。なお、アプリ用ウィンドウ411のアイコンと、ファビコン985と、の少なくとも一方は、アイコンのテイストを残したまま小さく表示するために、編集されたものでも良い。
なお、確認ページ(図6参照)でキャンセルの操作を受け付けた場合など、認証手続が未完了でリダイレクト要求を受け付けた場合、前述したように、未認証画面が表示される。本形態では、未認証画面も、認証完了画面98と同様に、スキャンアプリ41をアクティブな状態とすることを示す情報を含む。ただし、未認証画面は、認証完了画面98の認証完了の情報982に代えて、認証未完了であることを示す情報を含む。また、未認証画面は、文字情報として、キャンセルされたこと等、認証未完了となった理由を示す情報を含んでも良い。
認証完了画面98や未認証画面などのウェブページに含まれる各種のデータは、前述したように、ローカルサーバ43やスキャンアプリ41のプログラムファイル内、または、各プログラムから参照する参照ファイル内、すなわち、不揮発性メモリ14の共通の領域に記憶されている。ローカルサーバ43とスキャンアプリ41とは、不揮発性メモリ14に記憶されているデータを共通して参照することで、共通の設定や部品、例えば、共通のアプリの名称、共通のテーマ色、共通のアイコン、共通の言語を使用できる。
なお、共通の領域に記憶する代わりに、スキャンアプリ41がローカルサーバ43を起動する際に、スキャンアプリ41がローカルサーバ43にこれらの共通の情報を渡し、ローカルサーバ43が渡された情報を使用するとしても良い。また、クラウドサーバのサービス事業者に登録を申請するアプリの名称やアプリのアイコンも、ローカルサーバ43やスキャンアプリ41が表示に使用するものと共通にすると良い。
また、使用言語、テーマ色やアプリのアイコンについて、ユーザによる選択を受け付けても良い。例えば、スキャンアプリ41が、選択メニューからユーザの選択を受け付けても良い。また、スキャンアプリ41は、OS40のテーマ色と比較して違和感のない色をテーマ色として自動的に選択し、選択した色をテーマ色及びアイコンの色として不揮発性メモリ14に記憶させても良い。また、上記の各設定や部品に限らず、スキャンアプリ41は、アプリ用ウィンドウと各ウェブページに共通して表示される情報に関してユーザの選択や入力を受け付け、受け付けた情報を不揮発性メモリ14に記憶させて使用しても良い。
図4に示したように、手順68または73にてブラウザ42がアクティブな状態となっていることから、認証完了画面98や未認証画面が表示されるタイミングでは、スキャンアプリ41は、非アクティブな状態である。そのため、スキャンアプリ41への操作を継続するためには、スキャンアプリ41をアクティブな状態とする必要がある。認証完了画面98や未認証画面にスキャンアプリ41をアクティブな状態とすることを示す情報が含まれることで、ユーザの注意を喚起できる。
続いて、本形態のスキャンアプリ41の動作を実現するスキャンアプリ処理の手順について、図9のフローチャートを参照して説明する。このスキャンアプリ処理は、PC1にてスキャンアプリ41の起動指示を受け付けたことを契機に、CPU11にて実行される。
スキャンアプリ処理では、CPU11は、OS40にて使用されている言語を取得する(S101)。CPU11は、例えば、OS40に問い合わせることで、使用言語を取得できる。そして、CPU11は、スキャンアプリ41のアプリ用ウィンドウ411(図2参照)を開き(S102)、アプリ用ウィンドウ411に表示するページを、OS40にて使用されている言語の文字情報を含むページとする(S103)。
そして、CPU11は、言語を選択する指示を受け付けたか否かを判断する(S104)。OS40にて使用されている言語とは異なる言語を使用したいユーザは、言語の選択のメニューを用いて、スキャンアプリ41の使用言語を、選択可能な言語のうちから選択して設定できる。言語の選択の指示を受け付けたと判断した場合(S104:YES)、CPU11は、選択された言語を使用言語とし(S105)、アプリ用ウィンドウ411のページを使用言語のページとする。一方、言語の選択の指示を受け付けていないと判断した場合(S104:NO)、CPU11は、OS40の言語を使用言語とする(S106)。なお、CPU11は、使用言語を示す情報を不揮発性メモリ14に記憶させる。S105及びS106は、選択処理の一例である。
そして、CPU11は、スキャンアプリ41にてクラウドサーバへの保存の指示を受け付けたか否かを判断する(S107)。クラウドサーバへの保存の指示ではない指示を受け付けたと判断した場合(S107:NO)、CPU11は、指示を受け付けた動作を実行する(S108)。
クラウドサーバへの保存の指示を受け付けたと判断した場合(S107:YES)、CPU11は、アップロード処理を実行する(S109)。なお、アップロード処理は、スキャン指示等によって画像データを取得した後に選択される指示であり、アップロード処理の開始時には、アップロードの対象とされる画像データを取得済みである。アップロード処理の手順について、図10のフローチャートを参照して説明する。
アップロード処理では、CPU11は、クラウドサーバの選択画面であるクラウド選択ウィンドウ412(図3参照)を、アクティブな状態として、タッチパネル15に表示させる(S201)。本形態のスキャンアプリ41は、複数のクラウドサーバからアップロード先の選択が可能であり、ユーザの選択に基づいて、アップロード先のクラウドサーバを決定する。
そして、CPU11は、クラウドサーバの選択を受け付けたか否かを判断する(S202)。クラウドサーバの選択を受け付けていないと判断した場合(S202:NO)、CPU11は、キャンセルの指示を受け付けたか否かを判断する(S203)。キャンセルの指示を受け付けていないと判断した場合(S203:NO)、CPU11は、クラウドサーバの選択またはキャンセルの指示を受け付けるまで待機する。
クラウドサーバの選択を受け付けたと判断した場合(S202:YES)、CPU11は、選択されたクラウドサーバにサインイン中であるか否かを判断する(S204)。サインイン中ではないと判断した場合(S204:NO)、CPU11は、タッチパネル15を介してサインインの指示を受け付けたか否かを判断する(S205)。サインインの指示は、前述したように、アクティブな状態のクラウド選択ウィンドウ412に表示されているボタン(例えば、図3中のボタン851)の操作によって受け付ける。
サインインの指示を受け付けていないと判断した場合(S205:NO)、CPU11は、S202に戻り、クラウドサーバの選択、キャンセルの指示、または、サインインの指示を受け付ける。S205にてサインインの指示を受け付ける処理は、認証指示受付処理の一例であり、サインインの指示は、認証指示の一例である。
サインインの指示を受け付けたと判断した場合(S205:YES)、CPU11は、ローカルサーバ43を起動する(S206)(図4の手順52)。さらに、CPU11は、ブラウザ42を起動し(図4の手順53)、S206にて起動したローカルサーバ43をリダイレクト先とするとともに、指定されたクラウドサーバの認証画面を表示する指示を行う(S207)。S207は、ブラウザ指示処理の一例である。
S207の指示により、タッチパネル15には、例えば、図5や図6に示したように、ブラウザ42の表示画面がアクティブな状態で表示される。そのため、クラウド選択ウィンドウ412等のスキャンアプリ41の表示画面は、非アクティブな状態となる。つまり、ブラウザ42のウィンドウであるブラウザ表示画面421が最前面に表示され、ブラウザ表示画面421がアプリ用ウィンドウ411と重なって配置された場合には、アプリ用ウィンドウ411の少なくとも一部がユーザから見えない状態となる。S207は、ブラウザアクティブ処理及び第1ブラウザアクティブ処理の一例でもある。
非アクティブな状態であるウィンドウは、例えば、ウィンドウへのクリック、ウィンドウへのタッチなど、アクティブな状態への変更を指示するユーザ操作に基づいて、OS40によってアクティブな状態に変更される。所定のウィンドウがアクティブな状態であるとは、当該ウィンドウが、アクティブな状態への変更を指示する操作以外のユーザ操作の受け付け対象となっている状態であることを示す。アクティブな状態への変更指示以外のユーザ操作とは、例えば、ボタン入力、文字入力、カーソル移動である。なお、非アクティブな状態のウィンドウに含まれるボタンへのクリックやタッチなどは、アクティブな状態への変更指示と、ボタンへの操作とを兼ねていても良い。アクティブな状態のプログラムは、システムで1つであり、あるプログラムをアクティブな状態とすると、他のプログラムは、非アクティブな状態となるように、OS40によって制御される。
そして、CPU11は、ローカルサーバ43から認証情報を受信したか否かを判断する(S208)。認証情報は、前述したアクセストークンとリフレッシュトークンとの組であってもよいし、1つのトークンや認証キーであってもよい。認証情報を受信していないと判断した場合(S208:NO)、CPU11は、エラー情報を受信したか否かを判断する(S209)。
例えば、クラウドAへの認証手続き中にエラーが発生した場合や、図6に示した確認ページにてキャンセルボタン95への操作を受け付けた場合、クラウドAは、認可コードを送信しない。この場合、ブラウザ42は、図4の手順62にて、エラーの情報、または、キャンセルの情報を受信する。そして、ローカルサーバ43は、受信した情報が認可コードではないことから、図4の手順65を行わず、認証手続は成功しない。認証が成功しなかった場合、スキャンアプリ41は、ローカルサーバ43から未認証であることを示すエラー情報を受信する。
エラー情報を受信していないと判断した場合(S209:NO)、CPU11は、S208に戻り、認証情報またはエラー情報を受信するまで待機する。そして、エラー情報を受信したと判断した場合(S209:YES)、CPU11は、ローカルサーバ43を終了させる(S210)。さらに、S202に戻って、クラウドサーバの選択、キャンセルの指示、または、サインインの指示を受け付ける。
一方、認証情報を受信したと判断した場合(S208:YES)(図4の手順69)も、CPU11は、ローカルサーバ43を終了させる(S211)(図4の手順70)。なお、ローカルサーバ43にローカルサーバ43自身を終了させても良い。その場合は、S210やS211は不要である。
そして、CPU11は、認証の完了したクラウドサーバについて、クラウド選択ウィンドウ412のボタン851(図3参照)の表示をサインイン中であることを示す表示に変更させる(S212)。S212は、サインイン表示処理の一例である。CPU11は、ボタン851を消去し、例えば、図8に示したように、「サインアウト」を示すボタン852を表示させる。ボタン852を表示させることで、ユーザにサインイン状態であることが伝わり易い。
S212の後、または、既にサインイン中であると判断した場合(S204:YES)、CPU11は、クラウドサーバへの保存の指示を受け付けたか否かを判断する(S213)。クラウドサーバへの保存は、クラウドサーバを利用する処理の一例であり、保存の指示は、実行指示の一例であり、S213は、実行指示受付処理の一例である。
なお、スキャンアプリ41は、選択されたクラウドサーバがサインイン中であれば、クラウド選択ウィンドウ412に、図8に示したように、保存ボタン87を表示させる。そして、CPU11は、スキャンアプリ41がアクティブな状態で保存ボタン87への操作を受け付ける。ただし、前述したように、S107にてブラウザ42がアクティブな状態となり、ローカルサーバ43を終了させた後も、ユーザ操作を受け付けない限り、ブラウザ42がアクティブな状態のままとなっている。本形態では、認証完了画面98(図7参照)に情報981~985が含まれることで、スキャンアプリ41をアクティブな状態とするためのユーザ操作を促す。
また、スキャンアプリ41は、保存ボタン87への操作を受け付けるに際して、自身がアクティブな状態であるか否かを判断する必要はない。例えば、前述したように、ボタンへのクリックやタッチがアクティブな状態への変更指示を兼ねている場合には、スキャンアプリ41は、アクティブな状態であるか否かに関わらず、保存ボタン87への操作を受け付ける。
クラウドサーバへの保存の指示を受け付けていないと判断した場合(S213:NO)、CPU11は、クラウドサーバへの保存をキャンセルする指示を受け付けたか否かを判断する(S214)。キャンセルの指示を受け付けていないと判断した場合(S214:NO)、CPU11は、S213に戻り、保存の指示またはキャンセルの指示を受け付けるまで待機する。
クラウドサーバへの保存の指示を受け付けたと判断した場合(S213:YES)、CPU11は、S208にて受信した認証情報を添えて、画像データをクラウドサーバへ送信する(S215)(図4の手順71)。そして、S215の後、または、キャンセルの指示を受け付けたと判断した場合(S214:YES)、または、クラウドの選択がキャンセルされた場合(S203:YES)、CPU11は、アップロード処理を終了する。
次に、アップロード処理のS206にて起動されるローカルサーバ43の処理であるローカルサーバ処理の手順について、図11のフローチャートを参照して説明する。ローカルサーバ処理は、ローカルサーバ43が起動されたことを契機に、PC1のCPU11にて実行される。
ローカルサーバ処理では、CPU11は、リダイレクト要求を受信したか否かを判断する(S301)。リダイレクト要求を受信していないと判断した場合(S301:NO)、CPU11は、リダイレクト要求を受信するまで待機する。
リダイレクト要求を受信したと判断した場合(S301:YES)、CPU11は、受信したリダイレクト要求に認可コードが含まれているか否かを判断する(S302)。認可コードが含まれていると判断した場合(S302:YES)、CPU11は、認可コードをクラウドサーバに送信する(S303)(図4の手順65)。そして、CPU11は、クラウドサーバから、アクセストークンとリフレッシュトークンとの組を受信する(S304)(図4の手順66)。
さらに、CPU11は、認証結果が認証完了であることを示す完了画面のデータを取得する(S305)(図4の手順67)。CPU11は、認証できたことを示す完了画面として、例えば、認証完了画面98(図7参照)のウェブページデータを不揮発性メモリ14から読み出す。
そして、CPU11は、取得したデータの表示をブラウザ42に指示する(S306)(図4の手順68)。CPU11は、取得した認証完了画面98のデータをブラウザ42に渡す。これにより、ブラウザ42は、アクティブな状態となり、スキャンアプリ41は、非アクティブな状態となる。S307は、認証結果表示処理と第2ブラウザアクティブ処理との一例である。さらに、CPU11は、受信したアクセストークンとリフレッシュトークンとの組を、スキャンアプリ41に渡す(S307)(図4の手順69)。
一方、受信したリダイレクト要求に認可コードが含まれていないと判断した場合(S302:NO)、CPU11は、認証ができなかったことを示す完了画面のデータを取得する(S308)(図4の手順72)。例えば、認証がキャンセルされた場合には、CPU11は、認証できなかったことを示す完了画面として、キャンセルされた場合の未認証画面のウェブページデータを不揮発性メモリ14から読み出す。
そして、CPU11は、取得したデータの表示をブラウザ42に指示する(S309)(図4の手順73)。S309では、CPU11は、例えば、未完了画面99のデータをブラウザ42に渡す。これにより、ブラウザ42は、アクティブな状態となり、スキャンアプリ41は、非アクティブな状態となる。S310も、認証結果表示処理と第2ブラウザアクティブ処理との一例である。そして、CPU11は、認証結果が認証未完了であることを示すエラー情報をスキャンアプリ41に渡す(S310)(図4の手順74)。
S306またはS309にてブラウザ42に完了画面を表示する指示を行った場合、ブラウザ42は、アクティブな状態となり、スキャンアプリ41は、非アクティブな状態となる。これにより、完了画面が最前面に表示され、ユーザに認証状況が報知される。その一方で、その後の操作をスキャンアプリ41にて行うためには、スキャンアプリ41をユーザ操作によってアクティブな状態とすることが必要になる。本形態のスキャンアプリ41は、完了画面である認証完了画面98や未認証画面に、スキャンアプリ41をアクティブな状態とすることを示す情報が含まれることから、スキャンアプリ41をアクティブな状態とする必要性が認識し易く、ユーザの困惑の軽減が期待できる。
そして、CPU11は、ローカルサーバ43を終了させる終了コマンドを受信したか否かを判断する(S311)。終了コマンドを受信していないと判断した場合(S311:NO)、CPU11は、終了コマンドを受信するまで待機する。そして、終了コマンドを受信したと判断した場合(S311:YES)、CPU11は、ローカルサーバ処理を終了し、ローカルサーバ43を終了させる。なお、ローカルサーバ43は、起動された後、所定時間が経過してもリダイレクト要求を受信しなかった場合、タイムアウトとして、自身を終了してもよい。
上述したローカルサーバ処理では、スキャンアプリ41をアクティブな状態とするよう指示する情報を含む画面を表示するのみであり、ユーザの操作によってスキャンアプリ41がアクティブな状態となる。しかし、ローカルサーバ処理にて、スキャンアプリ41をアクティブな状態としてもよい。その場合、ローカルサーバ処理を、図11のフローチャートにて説明したローカルサーバ処理に、スキャンアプリ41をアクティブな状態とするための処理を加えた処理とする。
具体的には、CPU11は、図11のローカルサーバ処理のS311にて終了コマンドを受け付けたと判断した場合、ローカルサーバ処理を終了する前に、スキャンアプリ41をアクティブな状態とするコマンドをOS40に渡す。スキャンアプリ41をアクティブな状態とするコマンドをOS40に渡す処理は、アプリアクティブ処理の一例である。これにより、アプリ用ウィンドウ411がアクティブな状態となって前面に表示されるので、ユーザにスキャンアプリ41の操作に戻ることを促すことができる。スキャンアプリ41を自動的にアクティブな状態に戻すことで、ユーザはアプリをアクティブな状態にする操作が不要になり、困惑の軽減が期待できる。
なお、スキャンアプリ41をアクティブな状態とする場合でも、ブラウザ42には、前述した完了画面(認証完了画面98または未認証画面)を表示させることが好ましい。スキャンアプリ41をアクティブな状態にした場合であっても、ブラウザ42をアクティブな状態に戻してしまうユーザもいることから、ブラウザ42に、スキャンアプリ41をアクティブな状態にすることを示す情報を含む完了画面を表示させることで、ユーザは、アプリをアクティブな状態にする必要が有ることを認識でき、困惑の軽減が期待できる。また、完了画面を表示させることで、ユーザは、認証完了を認識できる。
また、CPU11は、図11のローカルサーバ処理のS311にて終了コマンドを受け付けたと判断した場合、ローカルサーバ処理を終了する前に、ブラウザ42を終了させるコマンドをOS40に渡してもよい。ブラウザ42を終了させるコマンドをOS40に渡す処理は、ブラウザ終了処理の一例である。ブラウザ42を終了させることで、ブラウザ42の表示画面であるブラウザ表示画面421が閉じられ、ブラウザ42の後面にあった表示画面がアクティブな状態となる。スキャンアプリ41からブラウザ42を起動していることから、スキャンアプリ41がブラウザ42の後面にある可能性が高く、スキャンアプリ41がアクティブな状態となる可能性が高い。認証が完了した後はブラウザ42が不要になるため、ブラウザ42を終了させる方が、ユーザの手間を省けるとともにメモリの使用効率も高まる。
なお、ローカルサーバ43は、認証結果を示す完了画面を表示した後、所定時間の経過を待ってからブラウザ42を終了させてもよい。あるいは、認証に成功した場合に限りブラウザ42を終了させるとしてもよい。
以上、詳細に説明したように、本形態のスキャンアプリ41は、クラウドサーバへのサインインの指示を受け付けた場合、ブラウザ42を起動させて認証ページを表示させ、クラウドサーバへの認証結果がブラウザ42に表示される。そして、認証結果がブラウザ42に表示された際には、ブラウザ42がアクティブな状態となっており、ユーザがスキャンアプリ41での操作を継続するためには、スキャンアプリ41をアクティブな状態とする必要がある。本形態では、認証完了画面98や未認証画面に、スキャンアプリ41をアクティブな状態とすることを示す情報が含まれる。認証結果をブラウザ42に表示させる際、スキャンアプリ41をアクティブな状態にすることを示す特定情報を含めることで、ユーザはスキャンアプリ41をアクティブな状態にする必要が有ることを認識でき、困惑の軽減が期待できる。
なお、本実施の形態は単なる例示にすぎず、本発明を何ら限定するものではない。したがって本発明は当然に、その要旨を逸脱しない範囲内で種々の改良、変形が可能である。例えば、PC1に接続されるデバイスは、スキャナ等の画像データを取得する装置に限らず、プリンタ等の画像データに基づく印刷を行う装置であっても良い。つまり、本明細書に開示される技術は、クラウドサーバに画像データをアップロードするアプリに限らず、クラウドサーバから画像データをダウンロードするアプリにおいても、適用可能である。
また、例えば、認証完了画面98や未認証画面に含ませる特定情報は、図7に例示したものに限らず、例えば、スキャナ2等のスキャンアプリ41の制御対象となるデバイスの画像、ブラウザ42を閉じる動作などを示す動画、音声メッセージ等でもよい。
また、例えば、ローカルサーバ43による画面データの取得処理(ローカルサーバ処理のS305、S308、図4の手順67、72)とブラウザ42への表示の指示(ローカルサーバ処理のS306、S309、図4の手順68、73)は、スキャンアプリ41への結果の送信(ローカルサーバ処理のS307、S310、図4の手順69、74)の後でもよい。
また、例えば、認証方式は、OAuth2.0を用いた認証方式に限らない。スキャンアプリ41は、選択されたクラウドサーバにて採用されている認証方式に基づいて、認証要求を行うと良い。
また、クラウドサーバへの認証が成功した後、ブラウザによって認証結果が通知されるが、アプリケーションプログラムをアクティブな状態にした後は、ブラウザの終了や、ブラウザがアプリケーションプログラムと重なって後面に配置されることで、認証に成功しているか否か、すなわち、サインイン状態であるか否かが、ユーザに取って分かり難い。
本明細書の技術によれば、アプリケーションプログラムが「サインアウト」ボタンを表示するので、ユーザは、アプリケーションプログラムのウィンドウを見るだけで、サインイン状態であることを認識でき、ユーザの困惑を軽減できる。
また、実施の形態に開示されている処理は、単一のCPU、複数のCPU、ASICなどのハードウェア、またはそれらの組み合わせで実行されてもよい。また、実施の形態に開示されている処理は、その処理を実行するためのプログラムを記録した記録媒体、または方法等の種々の態様で実現することができる。