Unityを使ってAndroidアプリを作成しています。
Firebaseを用いたプッシュ通知を実装しているのですが、トークンの取得に失敗しています。
どなたか推測だけでもよいので、情報をご存知でしたらお教えください。
■Android Studioで作成
java
1//FCM.java 2package hoge; 3import android.content.Context; 4import java.util.List; 5import com.google.firebase.iid.FirebaseInstanceId; 6import com.google.firebase.FirebaseApp; 7 import com.google.firebase.FirebaseOptions; 8 import com.google.firebase.messaging.FirebaseMessaging; 9 10 public class FCM { 11 private static String getToken(Context ctx) { 12 List<FirebaseApp> apps = FirebaseApp.getApps(ctx); 13 return apps.size() + ":"+ FirebaseInstanceId.getInstance().getToken(); 14 } } 15}
gradle
1//hoge内のbuild.gradle 2apply plugin: 'com.android.library' 3android { 4 compileSdkVersion 23 5 buildToolsVersion "23.0.3" 6 defaultConfig { 7 minSdkVersion 15 8 targetSdkVersion 23 9 versionCode 1 10 versionName "1.0" 11 } 12 buildTypes { 13 release { 14 minifyEnabled false 15 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 } 17 } 18 compileOptions { 19 sourceCompatibility JavaVersion.VERSION_1_6 20 targetCompatibility JavaVersion.VERSION_1_6 21 } 22 productFlavors { 23 } 24 lintOptions { 25 abortOnError false 26 } } 27dependencies { 28 compile fileTree(include: ['*.jar'], dir: 'libs') 29 compile 'com.android.support:appcompat-v7:23.3.0' 30 compile 'com.google.android.gms:play-services:9.6.0' 31 compile 'com.google.firebase:firebase-core:9.6.0' 32 compile 'com.google.firebase:firebase-messaging:9.6.0' 33 compile files('libs/unityclasses.jar') 34 } 35task clearJar(type: Delete) { 36 delete 'build/libs/unityfcmplugin.jar' 37 } 38 task makeJarFCM(type: Copy) { 39 from('build/intermediates/bundles/release/') 40 into('release/') 41 include('classes.jar') 42 rename('classes.jar', 'unityfcmplugin.jar') 43} 44 makeJarFCM.dependsOn(clearJar, build) 45 apply plugin: 'com.google.gms.google-services'
gradle
1//プロジェクト内のbuild.gradle 2buildscript { 3 repositories { 4 jcenter() 5 } 6 dependencies { 7 classpath 'com.android.tools.build:gradle:2.1.2' 8 classpath 'com.google.gms:google-services:3.0.0' 9 } 10} 11 allprojects { 12 repositories { 13 jcenter() 14 } 15 }
google-services.jsonはhoge内に入れてあります。
ビルド(gradleのSyncとjarの作成)は正常に通っています。
■Unityの設定
C#
1void Start () { 2 Debug.Log ("***** StartFCM"); 3 var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 4 var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 5 var appContext = activity.Call<AndroidJavaObject>("getApplicationContext"); 6 7 Debug.Log ("***** get RegistrationId"); 8 9 var registrar = new AndroidJavaClass ("hoge.FCM"); 10 regID = registrar.CallStatic<string> ("getToken", new object[] { appContext }); 11 12 if (!string.IsNullOrEmpty (regID)) 13 { 14 Debug.Log ("***** RegistrationId:[" + regID + "]"); 15 } 16 else 17 { 18 // Invoke background thread to get registration ID 19 Debug.Log ("***** id empty"); 20 } 21}
Plugins/Androidフォルダに「unityfcmplugin.jar」と「google-services.json」(意味は無いように思いますが……)を置いています。
この他に、PlayServicesResolverを用いて「firebase-core:9.6.0」「firebase-messaging
:9.6.0」を導入しています。
■結果
PCに実機を繋ぎ、Unityから直接書き出しした後、Logcatを見ていると以下のエラーを吐いています。
FirebaseApp initialization unsuccessful AndroidJavaException: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process hoge. Make sure to call FirebaseApp.initializeApp(Context) first.
試しにgetTokenメソッドの最初で「FirebaseApp.initializeApp(ctx);」と入れてみましたが結果は変わりません。
「FirebaseInstanceId.getInstance().getToken()」を実行せず「apps.size()」だけにすると「0」が返って来ます。
調べるとgradleの設定がおかしいという情報が多いのですが、Unityの場合どのように設定すればよいか分かりません。
GCMの時は上記のような手順(jarを作ってプラグインとして呼び出し)で動作していました。
(今回のUnityプロジェクト自体は新しく作ったまっさらなものです)
FCMの使用は初めてです。宜しくお願い致します。
あなたの回答
tips
プレビュー