GEMBA Note for Business 6
eYACHO for Business 6
Share for Business 6

カスタムURLスキーム仕様情報
Microsoftは、米国Microsoft Corporationの米国およびその他の国における登録商標です。
- 本書は株式会社MetaMoJiが作成したものであり、マニュアルの著作権は、株式会社MetaMoJiに帰属します。
- 本書の内容は予告なく変更することがあります。
-2021年 6月28日 ©2021 株式会社MetaMoJi

はじめに
本書では、iOS上のほかのアプリケーションとGEMBA Note for Business 6/ eYACHO for Business
6/Share for Business 6との連携をス ムーズに行うための仕様を説明しています。
連携は、iOS環境におけるカスタムURLスキームの仕組みを利用して行います。

本書では、製品名をそれぞれ次のように表記しています。
GEMBA Note for Business 6
eYACHO for Business 6
Share for Business 6

GEMBA NoteeYACHO
Shareできること
1．ほかの（呼び出し元）アプリケーションから取り込む（インポート）• GEMBA Note／eYACHO／Shareに取り込めるファイル形式•

PDFファイル（.pdf）•画像ファイル（.png、.gif、.jpg、.jpeg）•テキストファイル （.txt）•GEMBA/eYACHO 形式（.dydoc）

2．呼び出し元アプリケーションに送る• 送ることができるファイル形式•

PDF ファイル（.pdf）形式•

GEMBA/eYACHO 形式（ .dydoc）

3．シェアノートを呼び出し元アプリケーションに受け渡す（会議開催時）

ほかの（呼び出し元）アプリケーションから呼び出す
例）GEMBA/ eYACHO形式のファイルを開く場合

ほかの（呼び出し元）
アプリケーション

GEMBA Note

GEMBA 形式 eYACHO形式

カスタムURLスキーム呼び出し

eYACHO

呼び出し元アプリケーションに送る
連携オプションに"sendbackformat" が指定されている場合に表示されます

ほかの（呼び出し元）
アプリケーション"sendbackformat" オプションで指定した形式で送られます（PDF /GEMBA/eYACHO形式）

送るメニューに「○○（アプリ名）に送る」が表示されるのは、カスタムURLスキーム
で"sendbackformat" オプションを付けて開いた状態の場合です。

一度ノートを閉じた（ノート一覧画面に戻った/履歴タブで切り替えた）あと、再度開いた場合は表示されません。

シェアノートを呼び出し元アプリケーションに受け渡す（会議開催時）例）Shareに取り込む場合
PDF以外
ほかの（呼び出し元）
アプリケーション

はいPDF

PDFなど
カスタムURLスキーム
呼び出しPDFインポート設定

アプリケーションで配布する選択肢（「○○（アプリ名）で配る」）が表示されるのは、カスタムU R L ス キ ー ム で 開いた状態の場合です。
一度ノートを閉じた（ノート一覧画面に戻った/履歴タブで切り替えた）あと、再度開いた場合は表示されません。

カスタム U R L ス キームで指定されたアプリケーションで配布する選択肢が表示されます。

カスタムURLスキームの仕様
クリップボードを使った連携
アプリ間で引き渡すデータや連携オプションをクリップボードに格納してから、カスタムURLを使ってアプリを呼び出す連携方法です。

カスタムURLスキームの仕様
1. 連携の流れ
ほかの(呼び出し元)アプリケーション

GEMBA Note/eYACHO/Share①データと連携オプションをクリップボード に格納する。
②GEMBA Note/eYACHO/Shareのカスタ
ムURL をオープンする。

①起動 → クリップボードに格納されたものを取り出してインポートする。
○○(アプリ名)に送る②データと連携オプション（ファイル名）を クリップボードに格納する。

③起動 → クリップボードに格納されたものを取り出す。

③呼び出し元アプリのカスタムURLをオー
プ ンする。

クリップボードを使った連携
2. クリップボードに積む項目
クリップボードの1つ目のアイテムとして、次の2つの表現形式を格納します。
表現形式（UTI）
com.metamoji.noteanytime.importpb.data

型

説明

Data

PDFやGEMBA/eYACHO形式(.dydoc)などインポー
ト するデータ
ファイル名や呼び出し元アプリ名などの連携オプシ

com.metamoji.noteanytime.importpb.options

Dictionary

ョンを格納した辞書※ 3.連携オプションをご覧ください。

クリップボードを使った連携
3. 連携オプション
キー型

name

Stringsrcname

Stringsrcurl

Stringsendbackformat

String説明

ファイル名を想定※ ここで指定された拡張子によりデータの扱いが決定されます。
呼び出し元のアプリケーション名※ メニューUIなどの文字列として使用されます。
呼び出し元アプリケーションを呼び出すために使うURL文字列
sendbackformatパラメータを付ける場合は次のいずれかを指定
・sendbackformat=dydoc ... GEMBA/eYACHO形式
・sendbackformat=pdf ... PDF形式※ 必須ではありません。

クリップボードを使った連携
3. 連携オプション
キー型

説明
trueを指定すると、インポート後に続けてシェアノートを作成するかどうかを尋ねなくなります。

nonewshare

Bool

falseを指定すると従来通りの動きをします（⾃動的に「はい」が選ばれるわけではありません）。
※省略時:false

confirmclose

Bool

trueを指定すると、インポートしたノートの編集を終える前に確認メッセージを出すようになります。
falseを指定すると従来通りの動きをします。
※省略時:false※srcurlおよびsendbackformatが指定されているときにのみ有効です。

クリップボードを使った連携
4. URLの書式<スキーム>:///importpb

項目

スキーム

説明

GEMBA Noteで開く：gembanotech6
eYACHOで開く：eyachoch6
Shareで開く:sharech6

クリップボードを使った連携
5. 連携サンプル（Swift）◆GEMBA Note/eYACHOの呼び出し
func open(_ urlScheme: String, filePath: String, srcName: String, sendBackFormat: String?) {guard let data = try? Data(contentsOf: URL(fileURLWithPath: filePath)) else {
print("Failed to read data!")return}let srcurl = "YOUR-APP:///"
var options: [String: String] = [:]options["name"] = (filePath as NSString).lastPathComponent
options["srcname"] = srcName
options["srcurl"] = srcurl
if let sbformat = sendBackFormat {options["sendbackformat"] = sbformat}
let pasteboard = UIPasteboard.generalguard let optionsPList = try? PropertyListSerialization.data(fromPropertyList: options,format: .binary,
options: 0 ) else {
print("Failed to make plist!")return}pasteboard.items = [["com.metamoji.noteanytime.importpb.data": data,"com.metamoji.noteanytime.importpb.options": optionsPList,]]
let urlString = "¥(urlScheme):///importpb"
if let url = URL(string: urlString) {UIApplication.shared.openURL(url)}}クリップボードを使った連携
5. 連携サンプル（Swift）◆GEMBA Note/eYACHOの呼び出し
func storeFile() -> Bool {let pasteboard = UIPasteboard.generalguard let data = pasteboard.data(forPasteboardType: "com.metamoji.noteanytime.importpb.data") else { return false }
guard let optionsData = pasteboard.data(forPasteboardType: "com.metamoji.noteanytime.importpb.options") else { return false }
guard let optionsAny = try? PropertyListSerialization.propertyList(from: optionsData, options: [], format: nil) else { return false }
guard let options = optionsAny as? Dictionary<String, String> else { return false }
guard let file = options["name"] else { return false }let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let fileURL = URL(fileURLWithPath: file, relativeTo: URL(fileURLWithPath: documentsPath, isDirectory: true))
return (try? data.write(to: fileURL, options: .atomic)) != nil}

クリップボードを使った連携
5. 連携サンプル（Objective-C）◆GEMBA Note/eYACHOの呼び出し- (void)open:(NSString *)urlScheme withFile:(NSString *)filePath srcName:(NSString *)srcName sendBackFormat:(NSString *)sendBackFormat {NSString *srcurl = @"YOUR-APP:///";NSMutableDictionary *options = [NSMutableDictionary new];options[@"name"] = [filePath lastPathComponent];
options[@"srcname"] = srcName;
options[@"srcurl"] = srcurl;if (sendBackFormat != nil) {options[@"sendbackformat"] = sendBackFormat;}
if (discard) {options[@"discard"] = @"1";}
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.items =@[@{@"com.metamoji.noteanytime.importpb.data": [NSData dataWithContentsOfFile:filePath],@"com.metamoji.noteanytime.importpb.options": [NSPropertyListSerialization dataWithPropertyList:options
format:NSPropertyListBinaryFormat_v1_0
options:0
error:nil],}];
NSString *urlString = [NSString stringWithFormat:@"%@:///importpb", urlScheme];
NSURL *url = [[NSURL alloc] initWithString:urlString];
UIApplication *app = [UIApplication sharedApplication];[app openURL:url];}クリップボードを使った連携
5. 連携サンプル（Objective-C）◆GEMBA Note/eYACHOの呼び出し- (BOOL)storeFile {BOOL result = NO;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSData *data = [pasteboard dataForPasteboardType:@"com.metamoji.noteanytime.importpb.data"];
NSData *optionsData = [pasteboard dataForPasteboardType:@"com.metamoji.noteanytime.importpb.options"];
if (data != nil && optionsData != nil) {NSDictionary *options;
options = [NSPropertyListSerialization propertyListWithData:optionsData options:NSPropertyListImmutable format:nil error:nil];
if (nil != options && [options isKindOfClass:[NSDictionary class]]) {NSString *file = options[@"name"];if (nil != file) {NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:file];[data writeToFile:filePath atomically:YES];
result = YES;}}}
return result;}