Nifty Cloud mobile backendサービス C++Builderの使い方[JAPAN]

Posted by on in Programming

[C++Builderを使いニフティクラウドmobile backendに接続する方法]

ニフティクラウドmobile backend (URL https://console.mb.cloud.nifty.com/ )は

会員管理、データストア、ファイルストア、プッシュ通知などが行えるkinveyのようなサービスです。

無料である程度使えますし気軽に登録できます。

Android, iOS, JavaScript用のSDKは ニフティクラウド側にあるのですが

RESTのAPIドキュメントが揃っていますのでDelphiやC++BuilderでTNetHTTPClientなどを使いREST APIに接続する事も可能です。

 

C++Builder を使った iOSとWindowsでニフティクラウドmobile backend API接続方法です。

データストアAPIに問い合わせしデータを取得します。

embarcaderoと言う名称でクラスを作り、3つのオブジェクトを登録しました。

接続するにはAPIキー(アプリケーションキーとクライアントキー)が必要です。


この2つのキーを組み合わせてSignatureを作る必要があります。その方法は下記のURLです。

http://mb.cloud.nifty.com/doc/current/rest/common/signature.html

[画面設計]

FireMonkeyで適当に設計

Signatureを作る関数を作る。

////
String __fastcall TForm1::GetHMACAsBase64(String fmt_, String key_)
{
	//署名用文字列をメッセージ、クライアントキーを秘密鍵としてHmacSHA256でエンコードし、
	//それをBase64でエンコードしたものが、シグネチャとなります。
	TBytes byte_ = THashSHA2::GetHMACAsBytes(fmt_, key_, THashSHA2::TSHA2Version::SHA256);
	String ret = TNetEncoding::Base64->EncodeBytesToString(&byte_[0], byte_.High);
	return ret;
}

API接続部を作る

////
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	//現在時刻(UTC)を ISO8601 の形式で取得
	String strdate_iso_ = DateToISO8601(Now());
	Edit3->Text = strdate_iso_;
	//署名用文字列の作成
	//以下の4つを改行「\n」で連結することで、署名用文字列の生成を行います。
	//リクエストメソッド,FQDN,APIパス,「&」で連結された文字列
	String nformat_str = StringReplace(def_nifty_signature_str, "<_X-NCMB-Application-Key_>", Edit1->Text, TReplaceFlags()<<rfReplaceAll);
	nformat_str = StringReplace(nformat_str, "<_X-NCMB-Timestamp_>", strdate_iso_, TReplaceFlags()<<rfReplaceAll);
	nformat_str = StringReplace(nformat_str, "<_e1_>", Edit5->Text, TReplaceFlags()<<rfReplaceAll);
	String sig_ = GetHMACAsBase64(nformat_str, Edit2->Text);
	Edit4->Text = sig_;

	//APIに接続
	TThread::CreateAnonymousThread([&,this, strdate_iso_, sig_](){
//		std::unique_ptr<TNetHTTPClient> NetHTTPClient1{std::make_unique<TNetHTTPClient>(nullptr)};
		std::unique_ptr<TNetHTTPClient> NetHTTPClient1{new TNetHTTPClient(nullptr)};
		NetHTTPClient1->CustomHeaders["X-NCMB-Application-Key"]	= Edit1->Text;
		NetHTTPClient1->CustomHeaders["X-NCMB-Timestamp"]       = strdate_iso_;
		NetHTTPClient1->CustomHeaders["X-NCMB-Signature"]       = sig_;
		_di_IHTTPResponse res = NetHTTPClient1->Get("https://mb.api.cloud.nifty.com/2013-09-01/classes/" + Edit5->Text);
		TThread::Synchronize(TThread::CurrentThread, [&,this](){
			std::unique_ptr<TJSONObject> j1{std::move( static_cast<TJSONObject*>( TJSONObject::ParseJSONValue(res->ContentAsString(TEncoding::UTF8)) ) )};
			Memo1->Lines->Append(j1->ToString() );
		});
	})->Start();
}

iOS(iPhone 7)でデータが取得できました。

日本語以外の文字も出せました。

 

次はコードを変えずにWindows 10 (64Bit)で実行



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: