401 غير مصرح به باستخدام Oauth مع Twitter على iPhone
-
03-10-2019 - |
سؤال
أنا أستعمل Twitter-oauth-iphone.
عندما أحاول تسجيل الدخول على Twitter مع SA_OAuthTwitterEngine
, ، تلقيت خطأ 401 تلقيت دعوة المندوب ل:
- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
لكن عندما أحاول إرسال تغريدة بعد:
[_engine sendUpdate: [NSString stringWithFormat:@"Hello World"]];
تلقيت خطأ 401:
failed with error: Error Domain=HTTP Code=401 "Operation could not be completed. (HTTP error 401.)"
لقد تحقق من إعداد تطبيق Twitter الخاص بي:
Type: Client
Default Access type: Read & Write
المحلول
يجب أن تطلب الوصول إلى Xauth إلى api@twitter.com.
نصائح أخرى
HTTP 401 هو خطأ "غير مصرح به". تحقق من إعدادات API على Twitter وتأكد من أنك تستخدم القيم الصحيحة لـ kOAuthConsumerSecret
و kOAuthConsumerKey
الثوابت. تأكد أيضًا من تسجيل تطبيق Twitter الخاص بك كـ "عميل" وليس "متصفح".
قد يساعد هذا في الإجابة على سؤالك: لقد اكتشفت ذلك الآن:
أعتقد أنني استخدمت مات جيمميل و رمز المصدر على الرغم من أنني ربما استخدمت Ben Gottlieb ، لا أستطيع أن أتذكر تمامًا. متأكد من أنه مات رغم ذلك.
ومع ذلك ، فإن ما قمت به أيضًا هو إنشاء عرض فرعي مخفي يحمل حقل نص التغريد الفعلي ، وزر تغرد وزر إرجاع حتى يتمكن المستخدم من إخفاء العرض مرة أخرى.
لذلك لتلخيص ، لدي زر يوضح الرؤية الفرعية المخفية في الأصل ، وبينما يفعل ذلك ، فإنه يصادق المستخدم. هذا العرض الفرعي بعد ذلك يحتوي على زر تغريدة يستخدم لنشر التغريدات. إليكم الرمز الذي أجده قد عمل بالنسبة لي. الآن لقد أجريت اختبارات ضئيلة فقط ، لكنني آمل أن يكون الأمر كافياً لكم يا رفاق أن تنفجروا بمفردك وأخذها من هنا.
-(IBAction)shareTwit:(id)sender { //This shows the tweet view and authorises the user and engine
tweetView.hidden = NO;
if (!_engine) {
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
_engine.consumerKey = kOAuthConsumerKey;
_engine.consumerSecret = kOAuthConsumerSecret;
}
if (![_engine isAuthorized]) {
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];
if (controller) {
[self presentModalViewController: controller animated: YES];
}
else {
[_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]];
}
}
}
-(IBAction)updateTwitter:(id)sender { //This button sends the tweet to Twitter.
if ([_engine isAuthorized]) {
[_engine sendUpdate:tweetTextField.text];
[tweetTextField resignFirstResponder];
confirmation.text = @"Tweet sent successfully."; //This is an optional UILabel, if you would like the user to know if the tweet has been sent
// Currently, I haven't created a method where the user is told the sending failed.
}
else {
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];
if (controller) {
[self presentModalViewController: controller animated: YES];
}
else {
[_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]];
}
}
}
لاحظ أنني لم أستخدم ملف viewDidLoad
, ، أساسا لأنني لم أتفق معها. أردت أن ينقر المستخدم على shareTwit
زر أولا لتفعيل المصادقة. ثم في العرض الذي تم إطلاقه ، يمكنهم كتابة تغريدة. آمل أن يكون هذا يساعدك!
إعداد Callback URL
الحقل في ملف تعريف تطبيق Twitter الخاص بك.
يجب أن تكون متطابقة مع:
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);