Ошибка входа в игровые сервисы Google Play

Происходит очень странное явление.
Всякий раз, когда пользователь инициирует вход в систему, появляется представление «выберите учетную запись», после выбора учетной записи и нажатия кнопки «ОК» вход инициируется снова, и возвращается то же представление. Нажатие на кнопку «Отмена» возвращает игру с неудачным входом в систему, почему это происходит?

Перед инициацией входа в LogCat появляется следующее:

03-06 13:53:06.797: D/PhoneWindow(2967): couldn't save which view has focus    
because the focused view org.cocos2dx.lib.Cocos2dxGLSurfaceView@40537408 has no id.

Я реализовал так:

public class myapp extends BaseGameActivity {
   ...
   static Context mContext;
   boolean mInSignInFlow = false;
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState); 
    mContext = myapp.this;
    if(GooglePlayServicesUtil.isGooglePlayServicesAvailable (mContext) == ConnectionResult.SUCCESS){
        GoogleApiClient.Builder builder = 
               new GoogleApiClient.Builder(this);
               builder.addApi(Games.API)   
                  .addScope(Games.SCOPE_GAMES);
                mClient = builder.build();

       }
}

@Override
protected void onStart() {
    super.onStart();
    if (!mInSignInFlow) {
        // auto sign in
        mClient.connect();
    }
}
@Override
public void onSignInFailed() {
    Log.w("Sign In", "Failed");
}

@Override
public void onSignInSucceeded() {
    mInSignInFlow = true;
    Log.w("Sign In", "Success");
} 

public static void gameServicesSignIn() {
    ((myapp)mContext).runOnUiThread(new Runnable() {
        public void run() {
            ((myapp)mContext).beginUserInitiatedSignIn();
        }
    });
}

Я получаю журнал «Sign in Failed» при запуске и ситуации, описанной выше, когда gameServicesSignIn() вызывается при нажатии кнопки.


person GameDevGuru    schedule 06.03.2014    source источник
comment
Не могли бы вы опубликовать больше кода? Как вы предлагаете экран входа в систему?   -  person Philippe David    schedule 06.03.2014
comment
@PhilippeDavid см. редактировать   -  person GameDevGuru    schedule 07.03.2014


Ответы (2)


Похоже, вы не правильно строите. Просматривая поток (если вы расширяете BaseGameActivity), базовая настройка помощника уже позаботилась о вас.

Из BaseGameActivity

public GameHelper getGameHelper() {
    if (mHelper == null) {
        mHelper = new GameHelper(this, mRequestedClients);
        mHelper.enableDebugLog(mDebugLog);
    }
    return mHelper;
}

@Override
protected void onCreate(Bundle b) {
    super.onCreate(b);
    if (mHelper == null) {
        getGameHelper();
    }
    mHelper.setup(this);
}

Затем это также позаботится о настройке прослушивателей для вызова вашего onSignInFailed/Succeded.

Установочные материалы, которые я вижу в вашем коде, предназначены для случаев, когда вы не расширяете BaseGameActivity.

person user2346305    schedule 07.03.2014

в Android, если вы используете OpenGL (в случае cocos2d-x), вам необходимо установить:

cb.setImpressionsUseActivities(true);

И после установки этого вам также нужно будет поместить приведенный ниже код в AndroidManifest.xml:

<activity android:name="com.example.Activity"
    android:excludeFromRecents="true"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

Я действительно ничего не знаю о cocos2d-x, поэтому надеюсь, что это поможет.

person Philippe David    schedule 06.03.2014
comment
Ну, я не думаю, что это проблема cocos2dx, а что-то с моей реализацией игровых сервисов Google Play. Моя вышеуказанная интеграция выглядит правильно? - person GameDevGuru; 07.03.2014