2016-08-10 7 views
19

इस पोस्ट के बाद: http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html मैं इस्तेमाल के लिए एक एकल उपयोग प्राधिकरण कोड मेरी बैकएंड सर्वर पर इस प्रकार प्राप्त किया है:GetServerAuthCodeResult क्यों अस्वीकृत है? मैं इंस्टॉल किए गए एप्लिकेशन में कुछ समतुल्य कैसे कर सकता हूं?

import com.google.android.gms.games.Games;  
//later 
Games.GetServerAuthCodeResult result = Games.getGamesServerAuthCode(gameHelper.getApiClient(), server_client_id).await(); 
if (result.getStatus().isSuccess()) { 
    String authCode = result.getCode(); 
    // Send code to server... 

यह करने के लिए ठीक काम करता है लगता है, लेकिन यह एक प्रश्न प्रस्तुत करता है:

1) getGamesServerAuthCode और GetServerAuthCodeResult को बहिष्कृत के रूप में चिह्नित किया गया है। क्यूं कर? क्या मुझे इसके बजाय कुछ और इस्तेमाल करना चाहिए?

2) मैं एक गैर-एंड्रॉइड स्थापित जावा एप्लिकेशन में समतुल्य कुछ कैसे करूं? मैं क्लाइंट एप्लिकेशन पर एक टोकन प्राप्त करने में सक्षम हूं, लेकिन मुझे ऊपर दिए गए मेरे बैकएंड सर्वर को पास करने के लिए एक एकल उपयोग कोड भी प्राप्त करने की आवश्यकता है। सर्वर एथ कोड प्राप्त करने के लिए मुझे समकक्ष फ़ंक्शन नहीं मिल रहा है। (com.google.api.client.extensions.java6.auth.oauth2 का उपयोग करके)

मैं मूल रूप से इस प्रवाह का पालन करने की कोशिश कर रहा हूं: https://developers.google.com/games/services/web/serverlogin लेकिन जावा में नहीं, जावास्क्रिप्ट नहीं। मैं इसे एंड्रॉइड ऐप और डेस्कटॉप जावा ऐप में करने का प्रयास कर रहा हूं।

+1

एक कार्यक्रम तत्व एनोटेट @Deprecated एक है कि प्रोग्रामर का उपयोग करने से हतोत्साहित किया जाता है, आम तौर पर क्योंकि यह खतरनाक है, या क्योंकि एक बेहतर विकल्प मौजूद है। कंपाइलर्स चेतावनी देते हैं जब एक बहिष्कृत प्रोग्राम तत्व का उपयोग किया जाता है या गैर-बहिष्कृत कोड में ओवरराइड किया जाता है। इसका मतलब यह नहीं है कि यह दूर जायेगा, हटा दिया जाएगा या फिर भी हटा दिया जाएगा, इसका मतलब है कि ऐसा करने का एक बेहतर तरीका है। घबराओ मत, शांत रहो और आगे बढ़ें; ओ) –

+0

मैं इसे समझता हूं। मैं एंड्रॉइड में चीजों को करने का "सही" तरीका ढूंढ रहा हूं, क्योंकि काफी हाल ही में (जनवरी) Google इस फ़ंक्शन का उपयोग करने का सुझाव दे रहा था। मुझे एक तुलनात्मक फ़ंक्शन की अतिरिक्त समस्या है जो जावा एपीआई के गैर-एंड्रॉइड संस्करण में मौजूद नहीं है। – M1LKYW4Y

+1

@ M1LKYW4Y क्या आपको (1) में जो करना था वह करने का "सही" तरीका मिला? मैं अपने विकास में बिल्कुल वही बिंदु पर हूं। Google अपेक्षाकृत हाल ही में इस दृष्टिकोण की सिफारिश करना प्रतीत होता है, फिर भी दृष्टिकोण पहले ही बहिष्कृत लगता है! – Antinous

उत्तर

0

अंततः इस प्रश्न के भाग 1 का उचित उत्तर है)! जीएमएस के रिलीज नोट्स में 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 सर्वर कोड प्राप्त करने की नई विधि का वर्णन किया गया है। ऐसा करने का एक अच्छा उदाहरण यहां दिया गया है: https://github.com/playgameservices/clientserverskeleton
मैंने ऊपर दिए गए उदाहरण का पालन करने के लिए Google के बेसगेम उपयोग को अपडेट करना समाप्त कर दिया।

प्रश्न के भाग 2 के लिए ऐसा करने का उचित तरीका अभी भी सुनिश्चित नहीं है) फिलहाल मैं सर्वर पर टोकन भेज रहा हूं जो काम करता है लेकिन संभवतः असुरक्षित है।

0

1) हां, एंड्रॉइड में GetServerAuthCodeResult का उपयोग करें हालांकि इसे अभी भी बहिष्कृत के रूप में चिह्नित किया गया है। यह Google से अनुशंसित तरीका है और ऐसा लगता है कि वे आम जनता को रिहा करते समय केवल बहिष्करण एनोटेशन को हटाना भूल गए हैं।

2) डेस्कटॉप अनुप्रयोगों के लिए आप यहां दिए गए निर्देशों का पालन कर सकते: https://developers.google.com/identity/protocols/OAuth2InstalledApp

मूल रूप से अपने ऐप्लिकेशन से आपके सिस्टम ब्राउज़र (एम्बेडेड WebViews हतोत्साहित किया जाता है) खोलने के लिए और https://accounts.google.com/o/oauth2/v2/auth समाप्ति बिंदु को एक https अनुरोध करना। अनुरोध में आप एक स्थानीय रीडायरेक्ट यूआरआई पैरामीटर i.e. http://127.0.0.1:9004 (आपको प्रासंगिक लूपबैक आईपी के लिए अपने प्लेटफ़ॉर्म से पूछना चाहिए, और एक यादृच्छिक उपलब्ध पोर्ट पर HTTP श्रोता प्रारंभ करना चाहिए)। प्राधिकरण कोड आपके स्थानीय HTTP श्रोता को भेजा जाएगा जब उपयोगकर्ता ने सहमति दी है या उपयोगकर्ता ने अनुरोध को अस्वीकार कर दिया है तो error=access_denied जैसी त्रुटि दी गई है। ऑथोड के साथ प्रतिक्रिया पुनर्प्राप्त करने के लिए आपका एप्लिकेशन इस स्थानीय वेब सर्वर पर सुनना चाहिए। आपके पास सीधे आपके ऐप द्वारा दावा किए गए सर्वर यूआरआई पर रीडायरेक्ट करने का विकल्प भी है, ऊपर दिए गए लिंक पर दस्तावेज़ देखें। जब आपके ऐप को सर्वोत्तम उपयोगिता के लिए प्राधिकरण प्रतिक्रिया प्राप्त होती है, तो उसे HTML पृष्ठ से प्रतिक्रिया देनी चाहिए, जिससे उपयोगकर्ता को ब्राउज़र टैब बंद करने और अपने ऐप पर वापस जाने का निर्देश दिया जा सके। साथ ही, यदि आप गेम-स्कोप चाहते हैं तो सुनिश्चित करें कि आप अनुरोध में दायरे के रूप में https://www.googleapis.com/auth/games का उपयोग कर रहे हैं, नीचे उदाहरण, लाइन ब्रेक और पठनीयता के लिए रिक्त स्थान के साथ।

https://accounts.google.com/o/oauth2/v2/auth? 
    scope=https://www.googleapis.com/auth/games& 
    redirect_uri=http://127.0.0.1:9004& 
    response_type=code& 
    client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com 

कृपया ध्यान दें मुझे लगता है कि आप प्रकार other के ऐप्स बनाना होगा और लिंक करने होंगे, Google Play डेवलपर कंसोल लिंक्ड अनुप्रयोग में, स्थानीय होस्ट पुनर्निर्देशन काम करने के लिए। यदि आप सीधे सर्वर यूआरआई पर रीडायरेक्ट करने की योजना बनाते हैं तो Web का उपयोग करें, अनुभाग Credentials के तहत एपीआई प्रबंधक में अपना सर्वर यूआरआई Authorized redirect URIs जोड़ें।

ब्राउज़र स्क्रीनशॉट:

consent picture

+0

मेरी सावधानी बरतें, लेकिन आप 1 में कोड कैसे जानते हैं) वास्तव में Google द्वारा अनुशंसित किया गया है और बहिष्करण गलत है? क्या आपका स्रोत वही लेख है जो मैंने शीर्ष पर लिंक किया है? – M1LKYW4Y

+1

ठीक है, मैं निश्चित नहीं हूं, इसलिए "ऐसा लगता है" का उपयोग, लेकिन Google पर क्लेटन विल्किन्सन (डेवलपर प्रोग्राम इंजीनियर) यही कहता है: "इसे संभालने का सबसे अच्छा तरीका है ..." और "यह होगा एक सामान्य एपीआई बनें "। और उसके बाद इस मुद्दे के बारे में Google से कुछ भी नहीं घोषित किया गया है। साथ ही, यह एंड्रॉइड पर ऑथकोड लाने का एकमात्र तरीका है, मुझे संदेह है कि वे इसे जल्द ही हटा देंगे। यह इस साइन-इन सुविधा के आधार पर अपने स्वयं के सर्वर बैकएंड को चलाने के आधार पर बहुत सारे गेम तोड़ देगा। – jbilander

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