#はじめに
【nemAdventCalendar2019】本家にて
「ノンプログラマーがNEMブロックチェーン使ってアプリを作ってみた」
という記事を書いたのですが、
実際に私がどの様に作ったのかを、初心者向け書いていきたいと思います。
これを見れば、私と同じようなプログラミング経験ゼロの方でも、
「わぉ!NEMって簡単!!」
となってもらえたら。と願っております。
#自己紹介
日常生活でコードを触ることも見ることも無い 仕事をしつつ
という名前で、暗号通貨NEM界隈でアート活動をしたりとかイベント開いたりとかしてます。
そんなノンプログラミング人生の人間が、とあることがきっかけで、
**NEMのブロックチェーンを利用したアプリケーション**を作成しました。
#作るもの
NEMのブロックチェーン(NIS1)を利用し、特定のアドレスにNEM(XEM)が送金されると
画像が更新されるAndroidアプリの心臓部を作ります。
※心臓部とはつまり、NEMのトランザクション情報の取得部分です。
ここさえ理解すればあとは応用あるのみです。
##準備するもの
● AndroidStudio....Androidアプリの開発環境([AndroidStudioインストールで検索]
(https://blog.codecamp.jp/programming-androidstudio-windows))
※AndroidStudioをインストール後、エミュレータを使用可能にしてください。
● NEMウォレットアドレス....自身のNEMを管理するWalletのIDの様なもの
● NEM(XEM)....暗号通貨NEM。今回はこちらの送金をトリガーとして画像を切り替えます。
###NEMウォレットアドレスを所持していない場合
アドレス非所持=NEM(XEM)非所持だと思われますので、その場合は
①:nemgraphからアカウントを作成ください。
(設定後、プロフィール画面からアドレスを確認することが出来ます。)
②:nemgraphは写真をUPするとユーザから「いいね」と同様にNEM(XEM)を貰える可能性が高いので
NEM非所持の方はこちらから入手することをおすすめします。(1NEM取得で充分です。)
#アプリ作成開始
ここからは僕の数か月間を1時間以内にまとめます。
沢山の謎が出てくることでしょう。ですがここの正義は素直さです。
これどうなってるの?は後に回して、素直に突き進んでくださいませ!!
##①:AndroidStudioを起動しよう
● 「Start a new Android Studio project」をクリック
● 「Empty Activity」⇒「Finish」をクリック
● 「Name」⇒ ここでこのアプリの名前を入力します(好きな名前でOK)
● 「Language」⇒ 「Kotlin」を選択しましょう
● 「Minimum API level」⇒ 「API25:Android 7.1.1(Nougat)」を取り合えず選択しましょう
⇒上記を設定後に「Finish」をクリック
● 「Build Output」⇒ こちらが下記の様になっていれば準備完了
※ここまでは調べればいくらでも出てくるので、うまくいかなかった場合も安心して検索ください
##②:nem-kotlinライブラリをセットアップしよう
● implementation 'com.ryuta46:nem-kotlin:0.5.0'
を
「build.gradle(Module:app)」内に入力します。(たったこれだけでOKです)
implementation 'com.ryuta46:nem-kotlin:0.5.0'
※実際に入力した位置はこちら
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// ↓ここに入力しました。
implementation 'com.ryuta46:nem-kotlin:0.5.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
● 入力後は「Sync Now」をクリックして更新をかけましょう
##③:androidをインターネットに接続するための設定しよう
● <uses-permission android:name="android.permission.INTERNET" />
を
「AndroidManifest」内に入力します。
<uses-permission android:name="android.permission.INTERNET" />
※実際に入力した位置はこちら
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
##④:NEMのAPIクライアントをセットアップしよう
● val rxClient = RxNemApiClient("http://62.75.251.134:7890")
を
「MainActivity」内に入力します。
val rxClient = RxNemApiClient("http://62.75.251.134:7890")
※実際に入力した位置はこちら
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// NEMのAPIクライアントをセットアップする
val rxClient = RxNemApiClient("http://62.75.251.134:7890")
}
※あれれ?「RxNemApiClient」が赤字になっているよ?ですって?どうやらこの世界は、
新しいものを使うとき「これを使うよ!」って教えてあげないといけないらしいです。
方法は赤字箇所で**「Alt+Enter」⇒「import」**です。
このようにandroidStudioが教えてくれるのでとても助かりますね。
※ポイント※
これだけでもう何時でも、NEMのトランザクション情報その他を取得できます。
次からは取得方法を一気に記載しますが、何も考えず。結果をお楽しみください。
##⑤:NEMのTransaction情報を取得しよう
● 指定したNEMウォレットアドレスからNEMのトランザクション情報を取得します。
そして取得したトランザクション情報から「id」を取得します。
※ポイント※
private const val ADDRESS = "準備したNEMウォレットアドレス"
を入力してください。
// 指定したアドレスのNEMトランザクション情報を取得する
rxClient.accountTransfersIncoming(ADDRESS)
.subscribeOn(
Schedulers.io()
)
.subscribe { trasanctionList ->
// NEMトランザクション情報内の「id」を取得する
val id = trasanctionList.get(0).meta.id
Log.d("TAG", "${id}")
}
}
// アプリで使用するNEMウォレットアドレスを登録する
companion object {
private const val ADDRESS = "NAQQYNBXV7PDGRS3O6IE2A7E4RN2KN2B5SADYUSU"
}
※実際に入力した位置はこちら
※ポイント※
先ほどと同様に、赤字で表示されてしまう箇所(Schedulers
とLog
)は
**「Alt+Enter」⇒「import」**で導入しましょう。
下記は「import」済み。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// NEMのAPIクライアントをセットアップする
val rxClient = RxNemApiClient("http://62.75.251.134:7890")
// 指定したアドレスのNEMトランザクション情報を取得する
rxClient.accountTransfersIncoming(ADDRESS)
.subscribeOn(
Schedulers.io()
)
.subscribe({ trasanctionList ->
// NEMトランザクション情報内の「id」を取得する
val id = trasanctionList.get(0).meta.id
Log.d("TAG", "${id}")
})
}
// アプリで使用するNEMウォレットアドレスを登録する
companion object {
private const val ADDRESS = "NAQQYNBXV7PDGRS3O6IE2A7E4RN2KN2B5SADYUSU"
}
}
##⑥:取得したNEMのTransaction情報を確認しよう
● 下記画像の30行目の隣の部分をクリックしてください。赤丸が出てきたらOKです。
次に、右上のDebugボタンをクリックしてください。
● androidStudioのフッター部「Debug」をクリックし、「transactionList」の「▼」をクリックします。
※ポイント※
おめでとうございます!
あなたが設定したNEMアカウントのトランザクション情報が過去25件表示されています。
次に直近のトランザクション情報から「id」情報を見てみましょう。
下記の画像の通り、「0」をクリックし「meta」をクリックします。
すると「id」が表示されてますね。(ここでは「7290178」)
※ポイント※
突然ですが、これで私のアプリの心臓部は完成です。
つまりは、ここで取得した「id(以降id1)」を保存し、再度取得した「id(以降id2)」と比較し
**「id1≧id2」の場合は、更新されていない(入金されていない)**ということになります。
**「id1<id2」の場合は、更新されている(入金されている)**ということになります。
更新されている時だけ、画像を更新させることで、アプリが完成されるわけです。
凄く簡単な設計ですよね(笑
試しに、指定したアドレスにXEMを0XEMで送金してみてください。
1分後ぐらいに、再度debugをしてみましょう。
直近のトランザクションの「id」が更新されていることが分かると思います。
そのタイミングで画像が更新されるように設計してみてください。
「F-1000」が完成します。
#まとめ
いかがでしたでしょうか?
一番ややっこしそうな(検索しても出てこなさそうな)NEMブロックチェーン部分が
たった6STEP(STEPというかコピペ)で実装できました。
そろそろ言いたくありませんか?
**「NEMめちゃくちゃ簡単かも!」**と。
その気持ちがあるうちに、NEMアプリ開発を始めましょう!
トランザクション情報には他にも
「送金数」や「メッセージ」その他もろもろ格納されています。
ということは、
秘密のメッセージを送った人だけがみれる画像とか
(これってリアル脱出ゲームとかで使えそう)
指定した送金数の時だけ起動する何かとか
すでにもうその辺を作れるってことです、皆様は!!
あとは発想と行動と好奇心のみです。
今更100万人に愛されるアプリを考えようと意気込むよりも
自分の周りの10人を楽しませるアプリを作ることがこれからの正義です。
長文駄文失礼いたしました。
ご質問はいつでもこちらでお待ちしております。
ありがとうございました。
#お知らせ
##『NEMberアンケート2019』
締切:2019年12月23日(㈪)
アンケート内容:
①今年のNEM漢字
②今年頑張ったNEMber
★アンケートはこちらから☆
去年に引き続き、NEMberアンケートとなります。
ちなみに去年のNEM漢字は「耐」でした。
今年はどうなるのか?是非是非、ご回答くださいませ!!
##『大熊呑み2019』
開催日:2019年12月23日(㈪)
場所 :原宿某所
主催者:ねむぐま
継続こそ力なりってわけで、今年もダラダラやります。
NEMが気になるなら誰でも参加OKな、BBQ&コワーキング&LTイベント。
平日なのに11時~24時まで開いてますので。
夕方まではコワーキングスペースで勝手に仕事しててください。
夕方からはBBQを勝手にやってください。
僕はそれを見ているのが好きです。
これを見ているあなた様お気軽にいらしてください!!
##『nemセミナー2020(仮)』
開催日:2020年1月19日
場所 :都内の素敵な会場手配中
主催者:ちゃんかま
何だかものすっごい布陣がNEMのあれこれを教えてくれるイベントだそうですよ!
私もLTやります.....(まさかここまで強い布陣だとはつゆ知らず)