Skip to main content
TikTok for DevelopersTikTok for Developers


Login Kit with Objective-C


This guide details how to enable authentication from your iOS app to TikTok. After successfully completing authentication with TikTok, users will be able to access basic user data (display name and avatar). Additional permissions will require approval from the developer portal.


Please obtain a client key and secret from the developer portal on under "My apps". Please start with the steps in the Quickstart Guide.

iOS Integration

Authorization Request

  1. Create a request and set permissions equal to a set of scopes you are requesting from the user ex),video.list.
  1. Send an authorization request
  1. Obtain a user access_token with the code received after a successful user authorization; see Manage User Access Tokens
  • Construct base URL. 
  • The URL to complete authentication looks like this:{clientKey}&client_secret={clientSecret}&grant_type=authorization_code&code={code}
  • Security Advisory If you notice, one of the query parameters in this URL is the client_secret. It is NOT safe to have this client secret on your application or to make this request from your app. We highly recommend keeping the client secret on the server, creating a wrapper API to send the code and client key to your server, and from your server, make this request.
  • To fully test this out, you can replace the baseURLString in the code snippet with the one at step 4.i, but we recommend you find an alternative so that you don't expose the client secret in your app.
  • Create session, create request with url, and then create session task.
  • Retrieve access token from data and resume task
#import <TikTokOpenSDK/TikTokOpenSDKAuth.h>

/* STEP 1 */
NSArray *scopes = @",video.list"; // list your scopes;
NSOrderedSet *scopesSet = [NSOrderedSet orderedSetWithArray:scopes];
TikTokOpenSDKAuthRequest *request = [[TikTokOpenSDKAuthRequest alloc] init];
request.permissions = scopesSet;

/* STEP 2 */
__weak typeof(self) ws = self;
[request sendAuthRequestViewController:self
                completion:^(TikTokOpenSDKAuthResponse *_Nonnull resp) {
    __strong typeof(ws) sf = ws;

    /* STEP 3 */
    if (resp.errCode == 0) {
        /* STEP 3.a */
        NSString *clientKey = ...; // you will receive this once you register in the Developer Portal
        NSString *responseCode = resp.code;

        // replace this baseURLstring with your own wrapper API
        NSString *baseURlString = [NSString stringWithFormat:@"", responseCode, clientKey];
        NSURL *url = [NSURL URLWithString:baseURlstring];

        /* STEP 3.b */
        NSURLSession *session = [NSURLSession sharedSession];
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:urlRequest
                      completionHandler:^(NSData *_Nullable data,
                                NSURLResponse *_Nullable response,
                                NSError *_Nullable error) {
            /* STEP 3.c */
        [task resume];

    } else {
        // handle error

Handling Errors

For error handling and debugging, please view the list of Error Codes