2017-05-03 10 views
0

GoogleのユーザーAPIを使用して、Googleアカウントのユーザーデータをサインインして取得しています。ここでは、人のデータをフェッチするための私のコードは次のとおりです。Google People APIがリリースモードで動作しないandroid

protected Void getData(GoogleSignInAccount acct) { 
       profile.setEmail(acct.getEmail()); 
       profile.setName(acct.getDisplayName()); 

       GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(
         context, Collections.singleton(Scopes.PROFILE) 
       ); 
       credential.setSelectedAccount(new Account(acct.getEmail(), "com.google")); 
       People service = new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
         .setApplicationName(context.getString(R.string.application_name)) 
         .build(); 

       Person meProfile = null; 
       try { 
        //here is the problem in release 
        meProfile = service.people().get("people/me").execute(); 

       } catch (IOException e) { 
        Logger.d(TAG, e);// it returns 404 Not Found 
        Logger.writeLog(LoginActivityNew.this, TAG, "e msg - " + e.getMessage()); 
       } 

       if (meProfile != null) { 
        if (UtilCommon.isEmpty(profile.getName())) { 
         List<Name> names = meProfile.getNames(); 
         if (names != null) { 
          for (Name name : names) { 
           if (!UtilCommon.isEmpty(name.getDisplayName())) { 
            profile.setName(name.getDisplayName()); 
            break; 
           } 
          } 
         } 

        } 

        List<Birthday> birthdays = meProfile.getBirthdays(); 
        if (birthdays != null && birthdays.size() > 0) { 

         for (Birthday bDay : birthdays) { 
          if (bDay == null || bDay.getDate() == null) continue; 
          Date date = bDay.getDate(); 
          Calendar calendar = Calendar.getInstance(); 
          calendar.set(Calendar.DAY_OF_MONTH, date.getDay()); 
          calendar.set(Calendar.MONTH, date.getMonth()); 
          calendar.set(Calendar.YEAR, date.getYear()); 
          calendar.set(Calendar.HOUR_OF_DAY, 0); 
          calendar.set(Calendar.MINUTE, 0); 
          calendar.set(Calendar.SECOND, 0); 
          calendar.set(Calendar.MILLISECOND, 0); 
          profile.setDOB(calendar.getTime()); 

          break; 
         } 
        } 

        List<Gender> genders = meProfile.getGenders(); 
        if (genders != null && genders.size() > 0) { 

         profile.setSex(Profile.SEX_NONE); 
         for (Gender genderObj : genders) { 
          if (genderObj == null || UtilCommon.isEmpty(genderObj.getValue())) continue; 
          String gender = genderObj.getValue(); 
          if (gender.equals("male")) 
           profile.setSex(Profile.SEX_MALE); 
          else if (gender.equals("female")) 
           profile.setSex(Profile.SEX_FEMALE); 
          else if (gender.equals("unknown")) 
           profile.setSex(Profile.SEX_NONE); 
          else 
           profile.setSex(Profile.SEX_OTHERS); 

          break; 
         } 
        } 

        Logger.writeLog(LoginActivityNew.this, TAG, "name - " + profile.getName()); 
        Logger.writeLog(LoginActivityNew.this, TAG, "gender - " + profile.getSex()); 
        if (profile.getDOB() != null) 
         Logger.writeLog(LoginActivityNew.this, TAG, "dob - " + profile.getDOB()); 
       } 
      } 

プロセスにおけるGoogleの記号が正常に動作しているものの、ここでmeProfile = service.people().get("people/me").execute();ブロックで興味深いものが起こっています。

デバッグモードでは動作しますが、リリースモードでは動作しません。

このブロックリリースモードを使用している間に例外を返します:404 Not Found

要求されたURLは、このサーバ上で見つかりませんでした。

私はGoogleコンソールプロジェクトを確認し、デバッグとリリースキーに有効なSHA-1証明書を提供しました。

誰でもこの問題について知っていますか?ハマった。

答えて

1

を。これを行うには、build.gradleファイルにminifyEnabled = falseを設定します。

問題が解決した場合は、プロガード関連の問題です。

クラスの属性を使用して、proguardファイルのpeople API関連クラスを含むこの購入を解決できます。

+0

あなたは右兄です。それはそれがproguard関連する問題になる可能性があるとは思わなかった!問題を指摘してくれてありがとう。 :) –

+0

喜んで助けました:) – NoviceCoder

+0

これを解決するために使用されたプロガードルールを共有することができます。 – SSR

-1

あなたは、署名/エクスポートされたapkでアプリが動作していないと言っていますか? この場合、 署名付きSHAキーをGoogleアプリアカウントに追加する必要があります。

https://developers.google.com/people/v1/how-tos/authorizing

あなたは、このようなあなたの署名SHAキーを見つけることができます - あなたはそれを有効にした場合無効にProGuardのでAPKを署名生成

keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v 
+0

私はGoogleコンソールプロジェクトを確認し、デバッグとリリースキーに有効なSHA-1証明書を提供しました。 おそらくそれらの行が見つかりませんでした。問題は現在追跡されており、それはproguardに関連しています。 –

関連する問題