मैं पूछना चाहता हूं कि फोन पर पहले से कॉन्फ़िगर किए गए Google खाते के साथ उपयोगकर्ता को प्रमाणीकृत करने का सबसे अच्छा तरीका क्या है। मैंने पहले क्लाइंटलॉगिन को देखा है, लेकिन यह वही नहीं है जो मुझे चाहिए क्योंकि इसे उपयोगकर्ताओं को मेरे एप्लिकेशन में लॉगिन/पासवर्ड दर्ज करने की आवश्यकता है। मैं इसे ओथ के साथ कर सकता हूं लेकिन वहां मुझे उपयोगकर्ता से ब्राउज़र में अपने क्रेडेंशियल्स दर्ज करने के लिए कहा जाना चाहिए जो भी बेहतर नहीं है। मैं खाता प्रबंधक का उपयोग करना चाहता हूं (मैंने देखा है कि इसमें विशेष खाते के लिए विधि getPassword
है लेकिन यह मेरे लिए काम नहीं करता है), यदि किसी भी तरह से खाता प्रबंधक + क्लाइंट लॉजिइन या खाता प्रबंधक + ओथ कृपया मुझे बताएं। नतीजतन मैं अपने लॉगिन/पासवर्ड (कोर्स के एंड्रॉइड डिवाइस पर पुष्टि के बिना) Google खाते के साथ लॉग इन करने की क्षमता चाहता हूं, मुझे यकीन नहीं है कि यह संभव है लेकिन अगर इसे लागू करने के लिए कोई तरीका मौजूद है तो कृपया मुझे बताएं। ..एंड्रॉइड: Google प्रमाणीकरण
उत्तर
feb2010 में एक stackoverflow सवाल से: Anyway to Authenticate a user using Google Apps in an Android application?
और लेख ब्लॉग पोस्ट: http://javagwt.blogspot.com/2009/12/authenticating-android-app-to-google.html
याद रखें, अंतर अब गूगल अब द्वि-चरणीय प्रमाणीकरण करता है कि ताकि आप करना पड़ सकता है है कुछ चरणों को संशोधित करें।
मैंने इसे पहले ही पढ़ लिया है ...अधिक विशिष्ट होने के लिए मैं समझता हूं कि ओएथ तंत्र के साथ इसे कैसे किया जाए, जो कि ट्विटर जैसी अन्य सेवाओं के साथ प्रमाणित करने का एक अच्छा तरीका है, लेकिन Google खाते पहले ही एंड्रॉइड फोन में समर्थित हैं, और मैं उस चरण को छोड़ना चाहता हूं जहां उपयोगकर्ता को अपने प्रमाण पत्र दर्ज करना चाहिए और छोड़ना चाहिए सिर्फ पुष्टि है कि मेरा एप्लिकेशन डेटा पुनर्प्राप्त करने के लिए अपने खाते का उपयोग करेगा ... और क्या ... मैं ऐप इंजन से नहीं डेटा पुनर्प्राप्त करने की योजना बना रहा हूं लेकिन Google कार्यों से – endryha
आप खाता प्रबंधक में निर्माण का उपयोग कर सकते हैं:
Account[] accounts = accountManager.getAccountsByType("com.google");
फिर आप जिस खाते लौटे सूची से अपने पसंदीदा निकालें। अगला चरण AccountManager.getAuthToken
पर कॉल करना होगा।
एक बार जब आप authToken है, तो आप उस पर Google API के लिए फोन करके पारित कर सकते हैं:
api.setUserToken(token);
रूप setUserCredentials उपयोगकर्ता और पासवर्ड की आवश्यकता है कि करने के लिए विरोध।
हां, आप खाता प्रबंधक में जानकारी तक पहुंच सकते हैं और उपयोगकर्ता को पंजीकृत पासवर्ड के बिना पंजीकृत Google खाते (उदाहरण के लिए) का उपयोग कर प्रमाणित कर सकते हैं।
नीचे कोड nick johnson द्वारा और के द्वारा अपने मुख्य गतिविधि के साथ tencent
शुरू उदाहरण से एक कार्यात्मक मिश्रण और मैच है:
package com.tg.auth;
import org.apache.http.impl.client.DefaultHttpClient;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class AppInfo extends Activity {
DefaultHttpClient http_client = new DefaultHttpClient();
Activity activity;
String TAG = "TGtracker";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_info);
activity = this;
}
@Override
protected void onResume() {
super.onResume();
//Log.v(TAG, "resuming activity");
AccountManager accountManager = AccountManager.get(getApplicationContext());
//if result is null, you might not have a valid internet connection
Log.i(TAG, "got token, yipee: "+updateToken(accountManager, true));
}
private String updateToken(AccountManager am, boolean invalidateToken) {
String authToken = "null";
try {
Account[] accounts = am.getAccountsByType("com.google");
AccountManagerFuture<Bundle> accountManagerFuture;
if(activity == null){//this is used when calling from an interval thread
accountManagerFuture = am.getAuthToken(accounts[0], "android", false, null, null);
} else {
accountManagerFuture = am.getAuthToken(accounts[0], "android", null, activity, null, null);
}
Bundle authTokenBundle = accountManagerFuture.getResult();
authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
Log.v(TAG, "newToken preinvalidate: "+authToken);
if(invalidateToken) {
am.invalidateAuthToken("com.google", authToken);
authToken = updateToken(am, false);
}
} catch (IOException e) {
Log.e(TAG, "the exception was: "+e.toString());
e.printStackTrace();
}
return authToken;
}
}
उपयोग:
package com.tg.auth;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ZAuth02aActivity extends ListActivity {
protected AccountManager accountManager;
protected Intent intent;
String TAG = "TGtracker";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
this.setListAdapter(new ArrayAdapter<Account>(this, R.layout.list_item, accounts));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Account account = (Account)getListView().getItemAtPosition(position);
Intent intent = new Intent(this, AppInfo.class);
intent.putExtra("account", account);
startActivity(intent);
}
}
एक AppInfo वर्ग बनाने एक मैनिफेस्ट फ़ाइल, कुछ हद तक इस तरह (गतिविधियों को घोषित करना चाहिए + अनुमतियां):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tg.auth"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ZAuth02aActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AppInfo"></activity>
</application>
</manifest>
उपयोग निक जॉनसन लेआउट फ़ाइलों को here
जब मैं इसे आज़माता हूं, तो मुझे एक त्रुटि मिलती है जो मिलता है Result() इस लाइन से मुख्य धागे पर चलाएं: बंडल ऑथ टोकनबंडल = खाता प्रबंधक। भविष्य .getResult(); मैं यह पता लगाने पर काम कर रहा हूं कि इसे क्यों और कैसे हल किया जाए। –
Android SDK में "प्रमाणन" नमूना परियोजना की जाँच करें डाउनलोड कर सकते हैं, यह वास्तव में है कि नहीं करता है।
- 1. एंड्रॉइड ऐप के भीतर Google खाता प्रमाणीकरण
- 2. Google डेटा एपीआई प्रमाणीकरण
- 3. Google AppEngine: कस्टम प्रमाणीकरण
- 4. Google ड्राइव एपीआई प्रमाणीकरण
- 5. आईओएस: Google प्रमाणीकरण कोड
- 6. Google ओपनआईडी के साथ एंड्रॉइड प्रमाणीकरण। आगे क्या?
- 7. OAuth 2.0 (google api) प्रमाणीकरण?
- 8. Gdata पायथन Google ऐप्स प्रमाणीकरण
- 9. एंड्रॉइड प्रमाणीकरण केर्बेरोज
- 10. एंड्रॉइड में एनटीएलएम प्रमाणीकरण
- 11. साइटमैंडर प्रमाणीकरण और एंड्रॉइड
- 12. एंड्रॉइड - मूल प्रमाणीकरण
- 13. एंड्रॉइड जेटविटर, प्रमाणीकरण मुद्दे
- 14. एंड्रॉइड फेसबुक प्रमाणीकरण
- 15. वर्तमान एंड्रॉइड Google स्प्रेडशीट एपीआई
- 16. Google ऐप इंजन (पायथन) में कस्टम प्रमाणीकरण
- 17. सर्वर के लिए Google API प्रमाणीकरण
- 18. एंड्रॉइड में वाईफ़ाई प्रमाणीकरण त्रुटि
- 19. एंड्रॉइड सदस्यता और Google एपीआई
- 20. Google Play एंड्रॉइड मार्केट
- 21. Google Analytics एंड्रॉइड प्रेषण
- 22. क्या Google एंड्रॉइड
- 23. एंड्रॉइड Google मैप्स क्लासNotFoundException
- 24. Google मानचित्र ने एंड्रॉइड
- 25. एंड्रॉइड - Google मानचित्र रूटिंग
- 26. एंड्रॉइड Google वॉलेट
- 27. Google मानचित्र v2 एंड्रॉइड
- 28. एंड्रॉइड Google मानचित्र v2
- 29. Google मानचित्र एंड्रॉइड
- 30. एंड्रॉइड Google Plus App
अच्छा होगा अगर आपने अपने प्रश्न के सही उत्तर के लिए मतदान किया। या, यदि आपकी जरूरतों के अनुरूप कोई भी नहीं है, तो उन पर टिप्पणी की। हमें बनाता है, उत्तरदाताओं (आपने उस समय एक टिप्पणी की थी) आपकी मदद करने के हमारे प्रयासों की सराहना करते हैं। :) –