5

के साथ अधिकृत Google क्लाउड एंडपॉइंट्स का उपयोग करें मेरे पास एक ऐप है जो Google क्लाउड एंडपॉइंट्स का उपयोग करता है। कुछ तरीकों को प्राधिकरण की आवश्यकता है इसलिए मैंने this ट्यूटोरियल का पालन किया। इसके लिए GET_ACCOUNTS अनुमतियां आवश्यक हैं।Google साइन इन

मैं एप को रनटाइम अनुमतियों के साथ काम करने के लिए अद्यतन कर रहा हूं। मैं संपर्क पढ़ने की अनुमति का अनुरोध नहीं करना चाहता, लेकिन GET_ACCOUNTS एक ही समूह में है। इस वजह से मैं GET_ACCOUNTS अनुमति के बिना प्राधिकरण का उपयोग करना चाहता हूं।

मुझे लगता है कि Google Sign In काम कर सकता है लेकिन मैं Google साइन इन से परिणाम का उपयोग करने का कोई तरीका नहीं ढूंढ पाया।

Helloworld.Builder helloWorld = new Helloworld.Builder(AppConstants.HTTP_TRANSPORT, AppConstants.JSON_FACTORY,credential); 

क्रेडेंशियल वस्तु एक HttpRequestInitializer होना चाहिए, लेकिन गूगल साइन से में मैं एक GoogleSignInAccount मिलती है:

यह समाप्ति बिंदु को कॉल करने के लिए वस्तु बनाने के लिए इस्तेमाल किया कोड है।

तो, क्या ऐसा करना संभव है? यह कैसे किया जाना चाहिए?

उत्तर

6

मुझे अंततः समाधान मिला। ट्यूटोरियल का उपयोग here मिला।

आप GoogleSignInOptions में क्लाइंट आईडी जोड़ना होगा:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(CLIENT_ID) 
      .requestEmail() 
      .build(); 

ट्यूटोरियल आप अंत में एक GoogleSignInAccount मिल जाएंगी। एक GoogleCredential वस्तु में GoogleSignInAccount से टोकन सेट करें:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(new NetHttpTransport()) 
      .setJsonFactory(JacksonFactory.getDefaultInstance()) 
      .build(); 
credential.setAccessToken(GoogleSignInAccount.getIdToken()); 

इस क्रेडेंशियल Google मेघ Enpoints को प्रमाणीकृत कॉल करने के लिए तैयार है।

ध्यान दें कि आपको CLIENT_ID से "सर्वर: client_id:" भाग को हटाना होगा। तो अगर आप इस प्रयोग कर रहे थे:

credential = GoogleAccountCredential.usingAudience(this, 
    "server:client_id:1-web-app.apps.googleusercontent.com"); 

आपका CLIENT_ID होगा:

CLIENT_ID = "1-web-app.apps.googleusercontent.com" 

भी ध्यान रखें कि टोकन समय (। Aprox 1 मेरे परीक्षण में घंटा) की एक सीमित मात्रा में के लिए मान्य है

+0

शानदार, मैं बस इसी कारण से इसे देख रहा था (रनटाइम मॉडल का समर्थन करने के लिए अनुमतियों को दोबारा करना और स्ट्रीम करना चाहता था), बहुत बहुत धन्यवाद! मुझे आश्चर्य है कि क्या यह Google एंडपॉइंट्स क्लाउड पक्ष पर भी समस्या हल करता है जहां आपको अधिकृत उपयोगकर्ता को फिर से लोड करने की आवश्यकता होती है क्योंकि इसमें आईडी नहीं है ... – Creos

+0

मेरे लिए काम नहीं करता है: बैकएंड को एक पूर्ण com.google.appengine प्राप्त होता है .api.users.User जो तब होता है जब प्राधिकरण विफल हो गया है। क्या आपको एक ही समस्या का सामना करना पड़ा? thx – Creos

+0

मैंने जवाब संपादित किया। जांचें कि क्या आपके पास CLIENT_ID सही ढंग से सेट है या नहीं। आपको "सर्वर: client_id:" को हटाना होगा। मैंने यह भी पाया कि टोकन समाप्त हो गया है, इसलिए यह केवल साइन इन के बाद सीमित समय में ही काम करेगा। – 9and3r

संबंधित मुद्दे