ios - 403 त्रुटि-एक त्रुटि है। त्रुटि:अस्वीकृत_useragent




iphone google-calendar google-oauth (9)

मैं एक आईओएस ऐप के अंदर Google कैलेंडर एपीआई के लिए उपयोगकर्ता को अधिकृत करने की कोशिश कर रहा हूं। मैं उपयोगकर्ताओं को प्रमाणीकृत करने के लिए Google की OAuth2 सुविधा का उपयोग कर रहा हूं। विवरण पृष्ठ के साथ 403 त्रुटि के साथ प्राधिकरण पृष्ठ खुलता है:

इस उपयोगकर्ता-एजेंट को Google को OAuth प्राधिकरण अनुरोध करने की अनुमति नहीं है क्योंकि इसे एक एम्बेडेड उपयोगकर्ता-एजेंट (जिसे वेब-व्यू भी कहा जाता है) के रूप में वर्गीकृत किया गया है। हमारी नीति के अनुसार, केवल ब्राउज़र को Google को प्राधिकरण अनुरोध करने की अनुमति है। हम ब्राउज़र में प्राधिकरण अनुरोध करने के लिए देशी ऐप्स के लिए कई पुस्तकालयों और नमूने प्रदान करते हैं।

मैंने उसी लिंक का पालन किया जो इस लिंक में उल्लिखित है: https://developers.google.com/google-apps/calendar/quickstart/ios

मेरे कोड को देखने के बजाय, इस लिंक को देखना बेहतर है: https://developers.google.com/google-apps/calendar/quickstart/ios क्योंकि मैंने अपने आवेदन में एक ही चीज को कॉपी किया है।

नीचे मेरे ग्राहक हैं और keyChainItemName:

static NSString *const kKeychainItemName = @"Google Calendar API";
static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";

Answers

संक्षिप्त जवाब यह है कि Google ने OAuth प्रवाह के लिए अपने सुरक्षा प्रतिबंधों को अद्यतन किया है। वे देशी वेब-विचारों को OAuth प्रवाह शुरू करने की अनुमति नहीं दे रहे हैं, बल्कि लोगों को ऐसा करने के लिए ओएस ब्राउज़र का उपयोग करने के लिए प्रोत्साहित कर रहे हैं। आपके मामले में, आपको शायद Google कैलेंडर एसडीके के लिए अपने कोड को नए अनुशंसित प्रवाह का पालन करने के लिए अपडेट करना होगा। अधिक जानकारी Google ब्लॉग में उपलब्ध है

संपादित करें: मैंने एक क्रॉस प्लेटफार्म प्लगइन बनाने की कोशिश की है जो एक एक्समरिन फॉर्म ऐप में उपयोग करने के लिए देशी Google साइन-इन एसडीके के आसपास लपेटता है। अधिक जानकारी here मिल सकती here


एक ही मुद्दा मिला। निम्नलिखित संपत्ति को वेबव्यू ऑब्जेक्ट पर सेट करके हल किया गया:

webview.getSettings().setUserAgentString("Chrome/56.0.0.0 Mobile");

उम्मीद है कि यह मदद करेगा।


जैसा कि पिछले उत्तरों में बताया गया है, SFSafariViewController का एक तरीका है, लेकिन उन लोगों के लिए जो अभी भी OAuth प्रमाणीकरण के लिए WKWebView का उपयोग WKWebView , वहां एक सरल कामकाज है।

बस list से किसी एक के लिए customUserAgent बदलें या इसे कुछ मनमाना मूल्य पर सेट करें। उसके बाद disallowed_useragent त्रुटि गायब हो जाएगी:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
// Check for selector availability, as it is available only on iOS 9+
if ([webView respondsToSelector:@selector(setCustomUserAgent:)]) {
    webView.customUserAgent = @"MyCustomUserAgent";
}

UIWebView में User-Agent को बदलने के लिए आप यह उत्तर देख सकते हैं।

लेकिन सावधान रहें, क्योंकि कुछ बैकएंड कोड User-Agent शीर्षलेख मान पर निर्भर हो सकते हैं।


इस मुद्दे पर एक नज़र डालें इसके बजाय GTMAppAuth का उपयोग करें।


Google ने ओथ प्रमाणीकरण को संभालने के लिए एम्बेडेड ब्राउज़र को अनुमति देने की अनुमति नहीं दी है। आईओएस पर SFSafariViewController का उपयोग करने का सबसे अच्छा तरीका है। क्लाउडरेल एसडीके का उपयोग करके इसे हल किया जा सकता है:

उद्देश्य-सी में:

@implementation AppDelegate

  // This method will receive the redirect URI after the authentication process was
  // successfull
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

  // Here we pass the response to the SDK which will automatically
  // complete the authentication process.
  [[NSNotificationCenter defaultCenter] postNotificationName:@"kCloseSafariViewControllerNotification" object:url];

  return YES;
}

@end

और स्विफ्ट:

// This method will receive the redirect URI after the authentication process was
// successfull
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

    if (sourceApplication == "com.apple.SafariViewService") {
        // Here we pass the response to the SDK which will automatically
        // complete the authentication process.
        NSNotificationCenter.defaultCenter().postNotificationName("kCloseSafariViewControllerNotification", object: url)
        return true
    }
    return true
}

इस मुद्दे को कवर करने वाला पूरा ब्लॉग पोस्ट यहां पाया जा सकता है: Google सेवाओं के लिए 'disallowed_useragent' को हल करना


मेरे मामले में मैं Google के साथ लॉगिन करने के लिए मूल वेब दृश्य का उपयोग कर रहा था, मुझे पता चलता है कि आपको वेब एजेंट के लिए उपयोगकर्ता एजेंट प्रदान करना चाहिए, यह मेरे लिए काम किया गया था। कोड के नीचे आज़माएं मुझे यकीन है कि यह काम करेगा।

उद्देश्य सी

 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", @"UserAgent", nil];
 [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

स्विफ्ट 3.0

let dictionaty = NSDictionary(object: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", forKey: "UserAgent" as NSCopying)
UserDefaults.standard.register(defaults: dictionaty)

Google साइन-इन लॉगिन समाप्त करने के fetcherAuthorizer , fetcherAuthorizer प्राप्त करने के लिए currentUser का उपयोग करें, इसका उपयोग Google ड्राइव सेवा के लिए एक प्राधिकारी की तरह किया जा सकता है।

इसके बाद आप सामान्य रूप से Google ड्राइव सेवा का उपयोग कर सकते हैं:

GIDGoogleUser *googleUser = [GIDSignIn sharedInstance].currentUser;

if(googleUser != nil){
    self.service.authorizer = googleUser.authentication.fetcherAuthorizer;
    [self listFiles];

}

डिफ़ॉल्ट रूप से, यदि आपके पास कोई Google ऐप नहीं है, तो Google SDK एक UIWebView अंदर लॉगिन खोलता UIWebView जब हम निम्न विधि का उपयोग कर लॉगिन शुरू करते हैं।

        [[GIDSignIn sharedInstance] signIn];

मैंने बस इससे पहले एक पंक्ति जोड़ा, जो निम्नानुसार है।

        [[GIDSignIn sharedInstance] setAllowsSignInWithWebView:NO];

अब Google UIWebView पॉपअप का उपयोग करके अधिकृत नहीं है। इसके बजाय, यह सफारी ब्राउज़र में खुलता है। और अब सब कुछ ठीक उसी तरह काम करता है जैसा वह था।


आप एक आधुनिक स्रोत कोड प्रबंधन उपकरण भी देख सकते हैं। उदाहरण के लिए गिट बुद्धिमान विलय सुविधाओं है। इस लिंक को देखें कि आपको अपने वर्कफ़्लो को अपग्रेड करने पर विचार क्यों करना चाहिए।





ios iphone google-calendar google-oauth