メインコンテンツまでスキップ

Android アプリへの SDK 組み込み

このセクションでは、Android Studio を用いて作成したプロジェクトへの SDK 組み込み方法を説明します。

SDK 取得用トークンは、SDK 取得用トークンの作成を参照して予め用意しておいてください。

Android Studio のインストール

公式ドキュメントの「Android Studio をインストールする」をご参照ください。

この資料では Android Studio Flamingo (2022.2.1) を使用して解説します。 他のバージョンを利用する場合は、画面の表示等が異なる場合がありますので、適宜読み替えてください。

プロジェクトの作成

Android Studio を起動し「New Project」を選択します。

Templates は「Empty Activity」を選択し、Next をクリックします。

プロジェクト名などはお好みで入力してください。

SDK の組み込み

プロジェクトの settings.gradle を開きます。

dependencies に以下の設定を追加します。 <YOUR_SDK_TOKEN>の部分は、作成した SDK 取得用トークンを入力してください。

pluginManagement {
/* ... */
}
dependencyResolutionManagement {
/* ... */

repositories {
/* ... */

maven {
url "https://repo.platform.p8n.app"
credentials {
username = "token-user"
password = "<YOUR_SDK_TOKEN>"
}
}
}
}
注意

実際のプロジェクトでは、gradle の設定ファイルに SDK トークンを直接記載しないでください。 環境変数などを利用し、VCS にトークンが記録されないように注意してください。

次に、モジュールの build.gradle を開きます。

dependencies に以下の行を追加します。

plugins {
/* ... */
}

android {
/* ... */
}

dependencies {
/* ... */

def verifySdkVersion = "1.0.0"
implementation "jp.co.pocketsign.verify:shared:$verifySdkVersion"
implementation "jp.co.pocketsign.verify:driver-mock:$verifySdkVersion"
implementation "jp.co.pocketsign.verify:jpki-mock:$verifySdkVersion"
}

保存したら、Gradle Sync を実行して Android Studio に SDK を認識させます。

備考

SDK の最新バージョンはPocketSign Platform コンソールからご確認ください。

ヒント

この設定値は、モック環境用の SDK を読み込む設定です。 本番環境で利用する場合には、本番環境を参照してください。

NFC の有効化

AndroidManifest.xml を開きます。

以下のように NFC のパーミッションを追加します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<!-- ... -->

<uses-permission android:name="android.permission.NFC" />
</manifest>

テナント ID の設定

Android アプリのリソースに、文字列リソースとしてテナント ID を設定します。

ここでは、簡単のため res/values/strings.xml を編集しますが、任意のファイル名でリソースファイルを保存できます。

res/values/strings.xml を開き、name を pocketsign_verify_tenant_id として以下のようにリソースを追加してください。

<resources>
<string name="app_name">Example</string>
<string name="pocketsign_verify_tenant_id">00000000-0000-0000-0000-000000000000</string>
</resources>

サンプルコードの追加

MainActivity.kt を開きます。

以下のコードで置き換えます。 パッケージ名はプロジェクト作成時に指定したものに変更してください。

package app.p8n.docs.example

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import jp.co.pocketsign.verify.mock.driver.ReaderSession
import jp.co.pocketsign.verify.mock.mynacard.jpki.JPKIAP
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {

suspend fun run(pin: String): String {
// JPKI APへの接続準備を行います。
val session = ReaderSession(this, this)

// ここに実装を追加します。

session.close()
return "not implemented"
}

@OptIn(ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val scope = rememberCoroutineScope()
var pin by remember { mutableStateOf("") }
var result by remember { mutableStateOf("") }
Surface(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
) {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
OutlinedTextField(
modifier = Modifier.fillMaxWidth(),
value = pin,
onValueChange = { pin = it },
)
Button(
modifier = Modifier.fillMaxWidth(),
onClick = {
scope.launch {
result = "カードをタッチしてください ..."
try {
result = run(pin)
} catch (e: Exception) {
result = "エラー: ${e.message}"
}
}
},
) {
Text(text = "実行")
}
SelectionContainer {
Text(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
text = result,
)
}
}
}
}
}
}

これ以降、ハイライトしたrun()の中身を実装していきます。

ビルド

Android Studio の右上の「🔨」マークをクリックしてビルドします。

エラーが出なければ、SDK の組み込みは完了です。


次のステップ

SDK リファレンスを参照して、SDK の詳細な利用方法を確認してください。

実際のアプリケーションでの署名作成方法については、身元確認を参照してください。