سؤال

أنا أستعمل 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);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top