ios - 403 ত্রুটি-একটি ত্রুটি রয়েছে। ত্রুটি: বাতিল_ ব্যবহারকারীজেন্ট



iphone google-calendar-api (8)

আমি কোনও আইওএস অ্যাপের অভ্যন্তরে গুগল ক্যালেন্ডার এপিআইয়ের জন্য কোনও ব্যবহারকারীকে অনুমোদনের চেষ্টা করছি। আমি ব্যবহারকারীদের প্রমাণীকরণের জন্য গুগলের OAuth2 বৈশিষ্ট্যটি ব্যবহার করছি। অনুমোদনের পৃষ্ঠাটি বর্ণনা সহ 403 ত্রুটি সহ খোলে:

এম্বেড করা ব্যবহারকারী-এজেন্ট হিসাবে শ্রেণিবদ্ধ করা হয়েছে (এটি একটি ওয়েব-ভিউ হিসাবেও পরিচিত) এই ব্যবহারকারী-এজেন্টটিকে Google এ OAuth অনুমোদনের অনুরোধ করার অনুমতি নেই। আমাদের নীতি অনুসারে, শুধুমাত্র ব্রাউজারগুলিকে গুগলে অনুমোদনের অনুরোধ করার অনুমতি দেওয়া হয়। আমরা ব্রাউজারে অনুমোদনের অনুরোধ সম্পাদন করতে নেটিভ অ্যাপ্লিকেশনগুলির জন্য কয়েকটি গ্রন্থাগার এবং নমুনা অফার করি।

আমি এই লিঙ্কটিতে উল্লিখিত একই পদ্ধতি অনুসরণ করেছি: https://developers.google.com/google-apps/calendar/quickstart/ios

আমার কোডটি দেখার চেয়ে এই লিঙ্কটি দেখতে আরও ভাল: https://developers.google.com/google-apps/calendar/quickstart/ios কারণ আমি আমার অ্যাপ্লিকেশনে একই জিনিসটি অনুলিপি করেছিলাম।

নীচে আমার ক্লায়েন্টআইডি এবং কীচেইন আইটেম নাম রয়েছে:

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

আমার ক্ষেত্রে আমি গুগলের সাথে লগইন করতে নেটিভ ওয়েব ভিউটি ব্যবহার করছিলাম, আমি যেভাবে ওয়েব ইউভিউনে এটি আমার জন্য কাজ করা হয়েছিল তাতে আপনার ব্যবহারকারী এজেন্টকে কীভাবে সরবরাহ করা উচিত তা খুঁজে পাচ্ছি। নীচের কোডটি ব্যবহার করে দেখুন আমি নিশ্চিত যে এটি কাজ করবে।

অ্যাপ্লিকেশনটিতে কোডটি যুক্ত করুনফিনিশলঞ্চিং উইথঅপশনস

উদ্দেশ্য গ

 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)

আমি সমস্যাটি সমাধান করেছি এটিতে 1 বছর লেগেছে :-) খালি মজা করছে। কনফিগ.এক্সএমএলটিতে কেবল নীচের লাইনের পছন্দটি যুক্ত করুন

<preference name="OverrideUserAgent" value="Mozilla/5.0 Google" />

অনুগ্রহ করে নোট করুন আমি এই গুগল লগইন সমস্যাটি ইনপ্যাপ ব্রাউজার দিয়ে সমাধান করেছি।

ধন্যবাদ


এটি আমার জন্য কাজ করছে

 mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"); 

গুগল এম্বেড করা ব্রাউজারগুলিকে OAuth প্রমাণীকরণ হ্যান্ডেল করার অনুমতি দেয় না decided সবচেয়ে ভাল উপায় হ'ল আইওএস এ এসএফএসফারিভিউ কনট্রোলার ব্যবহার করা। ক্লাউডরেল এসডিকে ব্যবহার করে এটি কীভাবে সমাধান করা যায় তা এখানে:

উদ্দেশ্য-সি তে:

@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
}

এই সমস্যাটি অন্তর্ভুক্ত করার জন্য সম্পূর্ণ ব্লগ পোস্টটি এখানে পাওয়া যাবে: গুগল পরিষেবাদির জন্য 'নিষ্ক্রিয়_ ব্যবহারকারীজেন্ট' সমাধান করা


গুগল সাইন- currentUser লগইন শেষ করার পরে, currentUser পেতে বর্তমান fetcherAuthorizer ব্যবহার করুন, এটি গুগল ড্রাইভ পরিষেবাটির জন্য কোনও fetcherAuthorizer মতো ব্যবহার করা যেতে পারে।

এর পরে আপনি গুগল ড্রাইভ পরিষেবাটি সাধারণত ব্যবহার করতে পারেন:

GIDGoogleUser *googleUser = [GIDSignIn sharedInstance].currentUser;

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

}

ডিফল্টরূপে, যদি আপনার কোনও গুগল অ্যাপ না থাকে, আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করে লগইনটি শুরু করার সময় গুগল এসডিকে একটি UIWebView ভিতরে লগইনটি খোলে।

        [[GIDSignIn sharedInstance] signIn];

আমি এর আগে কেবল একটি লাইন যুক্ত করেছি, যা নিম্নরূপ।

        [[GIDSignIn sharedInstance] setAllowsSignInWithWebView:NO];

এখন গুগল UIWebView পপআপ ব্যবহার করে অনুমোদন দেয় না। পরিবর্তে, এটি সাফারি ব্রাউজারে খোলে। এবং এখন সবকিছু ঠিক যেমনভাবে কাজ করে তেমন কাজ করে।


সংক্ষিপ্ত উত্তরটি হ'ল গুগল OAuth প্রবাহের জন্য তার সুরক্ষা বিধিনিষেধ আপডেট করেছে। তারা নেটিভ ওয়েব-দর্শনগুলিকে OAuth প্রবাহ শুরু করার অনুমতি দিচ্ছে না, বরং লোকেরা ওএস ব্রাউজারগুলিকে এটি করতে উত্সাহিত করছে। আপনার ক্ষেত্রে, আপনাকে সম্ভবত গুগল ক্যালেন্ডার এসডিকে নতুন প্রস্তাবিত প্রবাহটি মান্য করার জন্য তাদের কোডটি আপডেট করার জন্য অপেক্ষা করতে হবে। আরও তথ্য গুগল ব্লগে পাওয়া যায়

সম্পাদনা: আমি একটি ক্রস প্ল্যাটফর্ম প্লাগইন তৈরির চেষ্টা করেছি যা জামরিন ফর্ম অ্যাপ্লিকেশন ব্যবহারের জন্য নেটিভ গুগল সাইন ইন এসডিকে চারপাশে মোড়ানো। আরও তথ্য here পাওয়া here






google-oauth