質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

837閲覧

Unityからkotlinで実装した指紋認証を呼び出す

nagi2011

総合スコア17

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/12/04 05:08

Unityからkotlinで実装した指紋認証を呼び出して、
Unityアプリとして指紋認証を実現しようとしています。

実機にandroidをインストールすると、
Unityからkotlinへの呼び出しができず、
Class Not Foundのエラーが出てしまいます。

どこが間違っているか、ご協力をお願いします。

■Unity側ソース

Unity

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class BiometricPromptManager : MonoBehaviour 8{ 9 private const string JAVA_CLASS_NAME = "com.test.unityplugin.BiometricPrompt"; 10 //Androidプラグインからコールバックを受け取るため 11 private const string OBJECT_NAME = "BiometricPromptManager"; 12 13 private string kotlinRet; 14 15 // Use this for initialization 16 void Start() 17 { 18 kotlinRet = "NG"; 19 gameObject.name = OBJECT_NAME; 20 FingerAuthStart(); 21 } 22 23 // Update is called once per frame 24 void Update() 25 { 26 27 } 28 public void FingerAuthStart() 29 { 30 GameObject.Find("Text").GetComponent<Text>().text = "開始"; 31 32 try 33 { 34 using (AndroidJavaClass plugin = new AndroidJavaClass(JAVA_CLASS_NAME)) 35 { 36 GameObject.Find("Text").GetComponent<Text>().text = "呼ぶ"; 37 plugin.CallStatic("biometric"); 38 } 39 40 } 41 catch (Exception e) { 42 GameObject.Find("Text").GetComponent<Text>().text = e.Message; 43 } 44 45 } 46 47 //CallBackで処理結果が返ってくる 48 public void BiometricPromptResult(string message) 49 { 50 kotlinRet = message; 51 GameObject.Find("Text").GetComponent<Text>().text = message; 52 53 Debug.Log(kotlinRet); 54 } 55}

■kotlin側ソース

kotlin

1package com.test.unityplugin 2 3import android.annotation.TargetApi 4import android.os.Build 5import androidx.biometric.BiometricPrompt 6import android.widget.Toast 7import androidx.appcompat.app.AppCompatActivity 8import com.unity3d.player.UnityPlayer 9import com.unity3d.player.UnityPlayer.UnitySendMessage 10import com.unity3d.player.UnityPlayerActivity 11import java.util.concurrent.Executors 12 13 14class BiometricPrompt : AppCompatActivity() { 15 16 @TargetApi(Build.VERSION_CODES.M) 17 fun biometric() { 18 19 UnitySendMessage("BiometricPromptManager", "BiometricPromptResult", "不明なエラーが発生しました"); 20 21 val promptInfo = BiometricPrompt.PromptInfo 22 .Builder() 23 .setTitle("タイトル。設定必須項目") 24 .setDescription("説明文") 25 .setNegativeButtonText("キャンセルボタン") 26 .build() 27 28 val executor = Executors.newSingleThreadExecutor() 29 val biometricPrompt = BiometricPrompt(this, executor, object : BiometricPrompt.AuthenticationCallback() { 30 override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { 31 // 成功した場合の処理 32 Toast.makeText(this@BiometricPrompt, "成功です", Toast.LENGTH_SHORT).show() 33 UnitySendMessage("BiometricPromptManager", "BiometricPromptResult", "OK"); 34 } 35 36 override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { 37 // エラーになった場合の処理。ダイアログが閉じる。errorCodeで切り分ける 38 Toast.makeText(this@BiometricPrompt, errString, Toast.LENGTH_SHORT).show() 39 UnitySendMessage("BiometricPromptManager", "BiometricPromptResult", errString.toString()); 40 } 41 42 override fun onAuthenticationFailed() { 43 // 認証に失敗した場合の処理。ダイアログは閉じない。 44 Toast.makeText(this@BiometricPrompt, "不明エラー", Toast.LENGTH_SHORT).show() 45 UnitySendMessage("BiometricPromptManager", "BiometricPromptResult", "不明なエラーが発生しました"); 46 } 47 }) 48 49 //「4-3-1. 生体認証ダイアログ」で作ったPromptInfoを指定。この処理が実行されるとダイアログが表示される。 50 biometricPrompt.authenticate(promptInfo) 51 } 52}

■aarについて
Assets\Plugins\Android配下に、以下を配置
unityplugin-debug.aar

■aarの中身について
res
values
AndroidManifest.xml
classes.jar
R.txt

■classes.jarの中身について
com\test\unityplugin
BiometricPrompt$biometric$biometricPrompt$1.class
BiometricPrompt.class
BuildConfig.class

■BiometricPrompt.classをjadで見ると

kotlin

1package com.test.unityplugin; 2import android.annotation.TargetApi; 3import android.content.Context; 4import android.view.View; 5import android.widget.Toast; 6import androidx.appcompat.app.AppCompatActivity; 7import androidx.biometric.BiometricPrompt; 8import com.unity3d.player.UnityPlayer; 9import java.util.HashMap; 10import java.util.concurrent.ExecutorService; 11import java.util.concurrent.Executors; 12import kotlin.Metadata; 13import kotlin.jvm.internal.Intrinsics; 14import org.jetbrains.annotations.NotNull; 15 16@Metadata(mv = {1, 1, 15}, bv = {1, 0, 3}, k = 1, d1 = {"\000\022\n\002\030\002\n\002\030\002\n\002\b\002\n\002\020\002\n\000\030\0002\0020\001B\005\006\002\020\002J\b\020\003\032\0020\004H\007\006\005"}, d2 = {"Lcom/test/unityplugin/BiometricPrompt;", "Landroidx/appcompat/app/AppCompatActivity;", "()V", "biometric", "", "unityplugin_debug"}) 17public final class BiometricPrompt extends AppCompatActivity { 18 @TargetApi(23) 19 public final void biometric() { 20 UnityPlayer.UnitySendMessage("BiometricPromptManager", "BiometricPromptResult", "); 21 22 Intrinsics.checkExpressionValueIsNotNull((new BiometricPrompt.PromptInfo.Builder()).setTitle(").setDescription(").setNegativeButtonText(").build(), "BiometricPrompt.PromptIn\")\n .build()"); BiometricPrompt.PromptInfo promptInfo = (new BiometricPrompt.PromptInfo.Builder()).setTitle(").setDescription(").setNegativeButtonText(").build(); 23 24 ExecutorService executor = Executors.newSingleThreadExecutor(); 25 BiometricPrompt biometricPrompt = new BiometricPrompt((FragmentActivity)this, executor, new BiometricPrompt$biometric$biometricPrompt$1()); 26 27以下、省略

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問