14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nem #2 Advent Calendar 2019

Day 21

NEMのトランザクション情報を取得してアプリを作る方法

Last updated at Posted at 2019-12-20

#はじめに

【nemAdventCalendar2019】本家にて
「ノンプログラマーがNEMブロックチェーン使ってアプリを作ってみた」
という記事を書いたのですが、
実際に私がどの様に作ったのかを、初心者向け書いていきたいと思います。
これを見れば、私と同じようなプログラミング経験ゼロの方でも、
「わぉ!NEMって簡単!!」
となってもらえたら。と願っております。

#自己紹介

日常生活でコードを触ることも見ることも無い 仕事をしつつ

nembear(ねむぐま)

という名前で、暗号通貨NEM界隈でアート活動をしたりとかイベント開いたりとかしてます。
そんなノンプログラミング人生の人間が、とあることがきっかけで、
**NEMのブロックチェーンを利用したアプリケーション**を作成しました。

header_mdpi - 2.png

経緯詳細はこちら(長文注意)

#作るもの

NEMのブロックチェーン(NIS1)を利用し、特定のアドレスにNEM(XEM)が送金されると
画像が更新されるAndroidアプリの心臓部を作ります。
※心臓部とはつまり、NEMのトランザクション情報の取得部分です。
 ここさえ理解すればあとは応用あるのみです。
F1000.jpg
##準備するもの
● AndroidStudio....Androidアプリの開発環境([AndroidStudioインストールで検索]
(https://blog.codecamp.jp/programming-androidstudio-windows))
※AndroidStudioをインストール後、エミュレータを使用可能にしてください。

● NEMウォレットアドレス....自身のNEMを管理するWalletのIDの様なもの
wallet.jpg

● NEM(XEM)....暗号通貨NEM。今回はこちらの送金をトリガーとして画像を切り替えます。

###NEMウォレットアドレスを所持していない場合
アドレス非所持=NEM(XEM)非所持だと思われますので、その場合は
①:nemgraphからアカウントを作成ください。
 (設定後、プロフィール画面からアドレスを確認することが出来ます。)
②:nemgraphは写真をUPするとユーザから「いいね」と同様にNEM(XEM)を貰える可能性が高いので
  NEM非所持の方はこちらから入手することをおすすめします。(1NEM取得で充分です。)

#アプリ作成開始

ここからは僕の数か月間を1時間以内にまとめます。
沢山の謎が出てくることでしょう。ですがここの正義は素直さです。
これどうなってるの?は後に回して、素直に突き進んでくださいませ!!

##①:AndroidStudioを起動しよう
● 「Start a new Android Studio project」をクリック
1.jpg
● 「Empty Activity」⇒「Finish」をクリック
2.jpg
● 「Name」⇒ ここでこのアプリの名前を入力します(好きな名前でOK)
● 「Language」⇒ 「Kotlin」を選択しましょう
● 「Minimum API level」⇒ 「API25:Android 7.1.1(Nougat)」を取り合えず選択しましょう
⇒上記を設定後に「Finish」をクリック
3.jpg
● 「Build Output」⇒ こちらが下記の様になっていれば準備完了
※ここまでは調べればいくらでも出てくるので、うまくいかなかった場合も安心して検索ください
5.jpg

##②:nem-kotlinライブラリをセットアップしよう

implementation 'com.ryuta46:nem-kotlin:0.5.0'
「build.gradle(Module:app)」内に入力します。(たったこれだけでOKです)

build.gradle(Module.app)
implementation 'com.ryuta46:nem-kotlin:0.5.0'

※実際に入力した位置はこちら

build.gradle(Module.app)
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」をクリックして更新をかけましょう
7.jpg

##③:androidをインターネットに接続するための設定しよう
<uses-permission android:name="android.permission.INTERNET" />
「AndroidManifest」内に入力します。

AndroidManifest
<uses-permission android:name="android.permission.INTERNET" />

※実際に入力した位置はこちら

AndroidManifest
 </application>
   <uses-permission android:name="android.permission.INTERNET" />
</manifest>

##④:NEMのAPIクライアントをセットアップしよう
val rxClient = RxNemApiClient("http://62.75.251.134:7890")
「MainActivity」内に入力します。

MainActivity
val rxClient = RxNemApiClient("http://62.75.251.134:7890")

※実際に入力した位置はこちら

MainActivity
    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が教えてくれるのでとても助かりますね。
alt+enter.jpg

※ポイント※
これだけでもう何時でも、NEMのトランザクション情報その他を取得できます
次からは取得方法を一気に記載しますが、何も考えず。結果をお楽しみください。

##⑤:NEMのTransaction情報を取得しよう
● 指定したNEMウォレットアドレスからNEMのトランザクション情報を取得します。
 そして取得したトランザクション情報から「id」を取得します。
※ポイント※
private const val ADDRESS = "準備したNEMウォレットアドレス"を入力してください。

MainActivity
//        指定したアドレスの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"
    }

※実際に入力した位置はこちら
※ポイント※
先ほどと同様に、赤字で表示されてしまう箇所(SchedulersLog)は
**「Alt+Enter」⇒「import」**で導入しましょう。
下記は「import」済み。

MainActivity
    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ボタンをクリックしてください。
debug.jpg
● androidStudioのフッター部「Debug」をクリックし、「transactionList」の「▼」をクリックします。
debug2.jpg
※ポイント※
おめでとうございます!
あなたが設定したNEMアカウントのトランザクション情報が過去25件表示されています。
次に直近のトランザクション情報から「id」情報を見てみましょう。

下記の画像の通り、「0」をクリックし「meta」をクリックします。
すると「id」が表示されてますね。(ここでは「7290178」)
debug3.jpg

※ポイント※
突然ですが、これで私のアプリの心臓部は完成です。
つまりは、ここで取得した「id(以降id1)」を保存し、再度取得した「id(以降id2)」と比較し
**「id1≧id2」の場合は、更新されていない(入金されていない)**ということになります。
**「id1<id2」の場合は、更新されている(入金されている)**ということになります。
更新されている時だけ、画像を更新させることで、アプリが完成されるわけです。
凄く簡単な設計ですよね(笑

試しに、指定したアドレスにXEMを0XEMで送金してみてください。
1分後ぐらいに、再度debugをしてみましょう。
直近のトランザクションの「id」が更新されていることが分かると思います。
そのタイミングで画像が更新されるように設計してみてください。
「F-1000」が完成します。
F1000.jpg

#まとめ
いかがでしたでしょうか?
一番ややっこしそうな(検索しても出てこなさそうな)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を勝手にやってください。
僕はそれを見ているのが好きです。
これを見ているあなた様お気軽にいらしてください!!
IMG_0547.PNG

##『nemセミナー2020(仮)』
開催日:2020年1月19日
場所 :都内の素敵な会場手配中
主催者:ちゃんかま
何だかものすっごい布陣がNEMのあれこれを教えてくれるイベントだそうですよ!
私もLTやります.....(まさかここまで強い布陣だとはつゆ知らず)

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?