जब एंड्रॉयड में AccountManager
में एक कस्टम खाता प्रकार को लागू करने मैं प्रवाह में हस्ताक्षर के लिए निम्नलिखित समस्या है:ब्राउज़र इरादे और सही गतिविधि (करीब खोला टैब) पर लौटने
एक OAuth प्रदाता के माध्यम से होना चाहिए में साइन इन करें। इसलिए मैंने SignInActivity
बनाया है जो WebView
लॉन्च करता है और ओएथ प्रवाह शुरू करता है। यह ठीक काम करता है, जब कॉलबैक my-custom-scheme://callback
पर प्राप्त होता है WebView
इसे पहचानता है, code
क्वेरीस्ट्रिंग पैरामीटर प्राप्त करता है और प्रवाह को पूरा करता है। WebView
का उपयोग करने के साथ नुकसान यह है कि भले ही उपयोगकर्ता के पास ब्राउज़र में सक्रिय सत्र हो, फिर भी इस सत्र का उपयोग WebView
में नहीं किया जाता है, इसलिए उपयोगकर्ता को WebView
में फिर से लॉगिन करना होगा।
इस का समाधान करने के लिए, मैं AndroidManifest.xml
में एक intent-filter
का उपयोग कर का उपयोग करने जा, इस तरह की कोशिश की:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="my-custom-scheme" android:path="callback"/>
</intent-filter>
के बजाय SignInActivity
में एक WebView
खोलने, मैं तो एक ब्राउज़र आशय का शुभारंभ और ब्राउज़र को हिट करने के लिए प्रतीक्षा करें my-custom-scheme://callback
।
if (intent != null && intent.getData() != null && getString("my-custom-scheme").equals(intent.getData().getScheme())) {
String code = getIntent().getData().getQueryParameter("code");
// complete oauth flow
}
यह काम करता है:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, "http://oauth2provider/authorize");
startActivity(browserIntent);
finish();
मेरी SignInActivity
में मैं कॉलबैक को संभालने के लिए निम्नलिखित कोड है। लेकिन, समस्या (अंत में!) करने के लिए:
- उपयोगकर्ता प्रवेश नहीं है, तो ब्राउज़र आशय OAuth प्रदाता के लिए साइन इन पृष्ठ प्रदर्शित करेगा। उपयोगकर्ता ने साइन इन करने के बाद, क्रोम मेरी-कस्टम-स्कीम पर रीडायरेक्ट करेगा: // कॉलबैक और
SignInActivity
इरादे को संभालने के लिए लॉन्च होगा। चूंकि यह गतिविधि अदृश्य है, ब्राउज़र साइन इन पेज पर खुला रहेगा, और उपयोगकर्ता को ऐसा कुछ भी नहीं लगेगा जैसा दिखता है। ब्राउज़र कभी बंद नहीं होता है। - यदि उपयोगकर्ता पहले से ही साइन इन है, तो oauth प्रदाता सीधे मेरी-कस्टम-योजना: // कॉलबैक पर रीडायरेक्ट करेगा। इस मामले में, ब्राउज़र टैब स्वचालित रूप से बंद हो गया है लेकिन ब्राउज़र स्वयं ही खुला रहता है (बिना टैब दिखाई दे रहा है)।
तो मेरा सवाल यह है: क्या मेरे कस्टम-स्कीम: // कॉलबैक पर रीडायरेक्ट होने के बाद ब्राउज़र अलग-अलग व्यवहार करने के लिए वैसे भी है? आदर्श रूप से, मैं इसे कॉलबैक पर रीडायरेक्ट करने के बाद बस बंद करना चाहता हूं, और गतिविधि स्टैक में पिछली गतिविधि पर लौटने के लिए (यानी उस गतिविधि के लिए जिसने शुरुआत से SignInActivity
शुरू किया था)।