2012-04-20 6 views
2

私は、ユーザーにGMapsへのアクセス(互いの検索)、チャットなどを提供するマルチユーザーのAndroidアプリケーションを開発中です。ユーザーはTwitter、Facebook、Google+などのアカウントでアプリケーションにログインする必要があります.G +以外のすべてのアカウントですべて正常に動作します。アプリケーションは所有者アカウントでのみG + APIにアクセスできます。他のアカウントでは、com.google.api.client.googleapis.json.GoogleJsonResponseException:404が見つかりませんでした。または「認証エラー」です。アプリケーションはAPIコンソールに登録され、OAuth2.0認証が使用されます。私はGoogleのサイトから標準の認証メカニズムを使用しています。別のG +アカウントを使用してログインすることはできますか?AndroidアプリでGoogle+アカウントを使用して複数のユーザーのアクセスを提供する方法

public class GooglePlusActivity extends Activity { 

public static final String LOG_TAG = GooglePlusActivity.class.getSimpleName(); 
public static final String EXTRA_FIRSTNAME = "firstname"; 
public static final String EXTRA_LASTNAME = "lastname"; 
public static final String EXTRA_NICKNAME = "nickname"; 
public static final String EXTRA_SEX = "sex"; 
public static final String EXTRA_AVATAR = "avatar"; 
public static final String EXTRA_ID_SOCNET = "id_socnet"; 

private ApplicationSettings mSettings; 
private Person mProfile; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mSettings = ((TomskApplication)getApplication()).getSettings(); 
    signIn(); 
} 

private void signIn() { 
    WebView webView = new WebView(this); 
    setContentView(webView); 
    webView.getSettings().setJavaScriptEnabled(false); 
    String googleAuthorizationRequestUrl = new GoogleAuthorizationRequestUrl(
      mSettings.getGPID(), mSettings.getGPRedirectURI(), 
      mSettings.getGPScope()).build(); 
    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url){ 
      if (url.startsWith(mSettings.getGPRedirectURI())) { 
       try { 
        Intent res_intent = new Intent(); 
        if (url.indexOf("code=") != -1) { 
         String code = url.substring(mSettings 
           .getGPRedirectURI().length() + 7, url 
           .length()); 

         AccessTokenResponse token = new GoogleAuthorizationCodeGrant(
           new NetHttpTransport(), 
           new JacksonFactory(), mSettings.getGPID(), 
           mSettings.getGPSecret(), code, mSettings 
             .getGPRedirectURI()).execute(); 

         mSettings.setGPToken(token); 

         // Loading user data 
         retrieveProfile(); 
         if (mProfile == null) {retrieveProfile();} 
         res_intent.putExtra(EXTRA_FIRSTNAME, mProfile 
           .getName().getGivenName()); 
         res_intent.putExtra(EXTRA_LASTNAME, mProfile 
           .getName().getFamilyName()); 
         res_intent.putExtra(EXTRA_NICKNAME, 
           mProfile.getNickname()); 
         res_intent.putExtra(EXTRA_SEX, mProfile.getGender()); 
         res_intent.putExtra(EXTRA_AVATAR, mProfile 
           .getImage().getUrl()); 
         res_intent.putExtra(EXTRA_ID_SOCNET, mProfile.getId()); 
         setResult(Activity.RESULT_OK, res_intent); 
         view.setVisibility(View.INVISIBLE); 
         finish(); 
        } else if (url.indexOf("error=") != -1) { 
         view.setVisibility(View.INVISIBLE); 
         setResult(Activity.RESULT_CANCELED); 
         finish(); 
        } 

       } catch (IOException e) { 
        Log.d(LOG_TAG, e.toString()); 
       } 
       return true; 
      } else { 
       return false; 
      } 
     } 

    }); 
    webView.loadUrl(googleAuthorizationRequestUrl); 
} 

/** 
* Retrieve user profile 
*/ 
private void retrieveProfile() throws IOException { 
    JsonFactory jsonFactory = new JacksonFactory(); 
    HttpTransport transport = new NetHttpTransport(); 

    AccessTokenResponse token = mSettings.getGPToken(); 

    GoogleAccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(
      token.accessToken, transport, jsonFactory, 
      mSettings.getGPID(), mSettings.getGPSecret(), 
      token.refreshToken); 

    Builder b = Plus.builder(transport, jsonFactory) 
      .setApplicationName("MyApp/1.0"); 
    b.setHttpRequestInitializer(accessProtectedResource); 
    Plus plus = b.build(); 
    mProfile = plus.people().get("me").execute(); 
} 

}私は、Googleのサイトで検索した

、スタックオーバーフローが何も見つかりませんでした。 はここに私のコード(Androidのバージョン1.6)です。助けてください。

答えて

0

いけないが、これが役立つことを知っているが、あなたが必死であれば....

2012年4月4日here

のAndroidクライアント側のLIBSのいくつかの新しいリリースを、新鮮なGoogle+のがありますmain()メソッドで再構成されたクラスを使用して、保護されたリソースにアクセスします。 R 1.8の新しいバージョンは少なくともスタックの一番上にあるあなたのコードとは異なります.... IM資格クラスとPLUS.Builderの新しい例での使用はおそらくかなり沸騰するでしょうあなたがすでに持っているのと同じ実装です。他に働くことができない場合は、新しいサンプルを見たいかもしれません。

1.8

public static void main(String[] args) { 
    try { 
     try { 
     // authorization 
     Credential credential = OAuth2Native.authorize(
      HTTP_TRANSPORT, JSON_FACTORY, new LocalServerReceiver(), 
      Arrays.asList(PlusScopes.PLUS_ME)); 
     // set up global Plus instance 
     plus = Plus.builder(HTTP_TRANSPORT, JSON_FACTORY) 
      .setApplicationName("Google-PlusSample/1.0").setHttpRequestInitializer(credential) 
      .build(); 

古いコードでgooglePlusサンプルから新しいコードhere

+0

どうもありがとう、私はこの上で動作します。 – Darkmike

+0

プロジェクトライブラリとアクセスアルゴリズムを更新する大きな原因でした!私は最終的にGoogle+のリソースアクセスアルゴリズムを理解しました)))しかし、今日私が見たように、プロジェクトで使用されるテストアカウントにはG +プロファイルがないというエラーがありました。私はプロファイルを作成した後、古いバージョンと新しいバージョンの両方が動作します。とにかく、情報をありがとう。 – Darkmike

関連する問題