AndroidRuntime: выключение виртуальной машины

Я создаю игру для Android. Это проект Unity3D, экспортированный в Android Studio. Я пытаюсь управлять всем взаимодействием Служб Google Play (GPS) в Android Studio. Это класс, отвечающий за взаимодействие с GPS (я знаю, что не следую стандартным шаблонам программирования):

package com.lemondo.eyescube;

import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.games.Games;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class GPSBinding implements ConnectionCallbacks, OnConnectionFailedListener {

    public GoogleApiClient googleApiClient;

    private static GPSBinding _gpsBindingInstance;
    public static GPSBinding instance(){
        if(_gpsBindingInstance == null){
            _gpsBindingInstance = new GPSBinding();
        }
        return _gpsBindingInstance;
    }

    public static void Initialize(){
        if(instance().googleApiClient == null) {
            instance().googleApiClient = new GoogleApiClient.Builder(UnityPlayer.currentActivity)
                    .addConnectionCallbacks(instance())
                    .addOnConnectionFailedListener(instance())
                    .addApi(Games.API)
                    .addScope(Games.SCOPE_GAMES)
                    .build();
        }
    }

    public static void AuthenticatePlayer() {
        Log.d("GPSBinding", "AuthenticatePlayer");
        try {
            if (instance().googleApiClient != null)
                instance().googleApiClient.connect();
            else
                Log.d("GPSBinding", "AuthenticatePlayer: googleApiClient is null");
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void onConnected(Bundle bundle) {
    }

    @Override
    public void onConnectionSuspended(int i) {
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
    }

}

Вот что происходит: приложение запускается, Unity вызывает метод Initialize() при запуске, оно ждет 1 секунду и вызывает метод AuthenticatePlayer().

Приложение падает на этой строке в Authenticatelayer ():

instance().googleApiClient.connect();

Я не понимаю причину, хотя, это трассировка стека:

01-12 12:46:02.602 30609-30609/com.lemondo.eyescube D/AndroidRuntime: Shutting down VM
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: FATAL EXCEPTION: main
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: Process: com.lemondo.eyescube, PID: 30609
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: java.lang.Error: FATAL EXCEPTION [main]
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: Unity version     : 5.2.1f1
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: Device model      : samsung GT-I9500
01-12 12:46:02.605 30609-30609/com.lemondo.eyescube E/AndroidRuntime: Device fingerprint: ...
01-12 12:46:25.139 30609-30609/com.lemondo.eyescube I/Process: Sending signal. PID: 30609 SIG: 9

Подобные вопросы по SO просто говорят о настройке Google Analytics, которой я вообще не пользуюсь. Странно то, что он даже не ловит исключение - просто бум! Крах! У кого-нибудь есть идеи, что может быть не так? Заранее спасибо!

1 ответ

Решение

Так глупо - я забыл добавить идентификатор приложения в мой манифест:

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
Другие вопросы по тегам