QuickBlox Developers (API docs, code samples, SDK)

SimpleSample-users-ios

From QuickBlox Developers (API docs, code samples, SDK)
Jump to: navigation, search

Contents

Sources

Project homepage on GIT — https://github.com/QuickBlox/quickblox-ios-sdk/tree/master/sample-users

Download ZIP - https://github.com/QuickBlox/quickblox-ios-sdk/archive/master.zip

Overview

This sample demonstrates how to work with Users QuickBlox module.
It allows to see all users, their details, create user, search user, edit current user, sign in, sign out, use social networks (Facebook, Twitter)

It shows how to:

  1. Retrieve all users
  2. Get users' details
  3. Edit user's parameters
  4. Search users
  5. Sign Up, Sign In/Sign out
  6. How to use QuickBlox through social networks (Facebook, Twitter)

SimpleSample-users-ios_new1.png  SimpleSample-users-ios_new2.png.png


Guide: Get Started with Users API

Get QuickBlox account

http://admin.quickblox.com/register

Create application on Admin panel

http://admin.quickblox.com/apps/new

Also you can look through 5 min guide.

Connect QuickBlox to your application

To get the information on how to connect to the QuickBlox.framework, please, refer to the IOS-how-to-connect-Quickblox-framework page.

Add User Base to your application

In order to use QuickBlox Users APIs (any QuickBlox API) you must create session. Then you will have READ access in QuickBlox environment:

Create session

[QBAuth createSessionWithDelegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
// QuickBlox result delegate
- (void)completedWithResult:(Result *)result{
 
    // Create session result
    if(result.success && [result isKindOfClass:QBAAuthSessionCreationResult.class]){
       // You have successfully created the session
       //
       // Now you can use QuickBlox API!
    }
}

Next, you can work with Users API.

Let's register a new user:

Sign Up

Create new User (registration)

Only login/email and password fields are required

QBUUser *user = [QBUUser user];      
user.login = @"Javck";
user.password = @"javckpassword";
user.externalUserID = 1234;
user.facebookID = @"124343453463463";
user.twitterID = @"142345256";
user.fullName = @"Javck Bold";
user.email = @"Javck@mail.com";
user.phone = @"0947773823";
user.tags = [NSArray arrayWithObjects:@"man", @"travel", nil];
user.website = @"www.mysite.com";
 
[QBUsers signUp:user delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
-(void)completedWithResult:(Result*)result{
        // Create User result
	if(result.success && [result isKindOfClass:[QBUUserResult class]]){
            QBUUserResult *userResult = (QBUUserResult *)result;
	    NSLog(@"Registration was successful, user=%@", userResult.user);
	}else{
	    NSLog(@"errors=%@", result.errors);
	}	
}

If registration was successful - you can sign in using you login/email and password.

Sign In & Social authorization

There are 4 methods that you can use to sign in to QuickBlox:

  • Sign In with login & password
  • Sign In with email & password
  • *Sign In using Facebook/Twitter dialog form
  • Sign In using Facebook/Twitter access token

*If you want to sign in through Social networks (Facebook/Twitter) using dialog form - please refer to Social Networks Integration Manual

Sign In with login & password

[QBUsers logInWithUserLogin:@"garry" password:@"garry2892"  delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
-(void)completedWithResult:(Result*)result{
    if(result.success && [result isKindOfClass:[QBUUserLogInResult class]]){
	QBUUserLogInResult *loginResult = (QBUUserLogInResult *)result;
            NSLog(@"LogIn was successful, user=%@", loginResult.user);
    }else {
        NSLog(@"errors=%@", result.errors);
    }
}

Sign In with email & password

[QBUsers logInWithUserEmail:@"cptjack@portroyal.com" password:@"iostest2" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    if(result.success && [result isKindOfClass:[QBUUserLogInResult class]]){
        QBUUserLogInResult *loginResult = (QBUUserLogInResult *)result;
        NSLog(@"LogIn was successful, user=%@", loginResult.user);
    }else{
	NSLog(@"errors=%@", result.errors);
    }
}

Sign In using Facebook/Twitter dialog form

[QBUsers logInWithSocialProvider:@"facebook" scope:@[@"publish_stream"] delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    if(result.success && [result isKindOfClass:[QBUUserLogInResult class]]){
        QBUUserLogInResult *loginResult = (QBUUserLogInResult *)result;
        NSLog(@"LogIn was successful, user=%@, \n socialProviderToken=%@, \n socialProviderTokenExpiresAt=%@", loginResult.user, loginResult.socialProviderToken, loginResult.socialProviderTokenExpiresAt);
    }else{
	NSLog(@"errors=%@", result.errors);
    }
}

Dialog with login & password fields will be appear:

IOS SocialDialog1.png IOS SocialDialog2.png

Sign In using Facebook/Twitter access token

There are lots of use cases where this API will be helpful. For example, Twitter framework (iOS5) or Social Framework (iOS6).

For example, you set Twitter account in your device Settings, and use it for tweets like this:

TwitteriOS5-6.jpeg

And you want to use this account to login to QuickBlox. But you need to retrieve access token & access token secreet. There is one Twitter official solution: Using Reverse Auth. Just use it to retrieve your credentials and then you will be able to sign in to QuickBlox using your Twitter system account.

[QBUsers logInWithSocialProvider:@"facebook" accessToken:@"AAAGmLYiu1lcBADxROiXg4okE80FQO1dJHglsbNT3amxmABnmBmhN6ACbgDqNC3H4Y9GmZAdoSfPUkI9O7ZBJvKQCewNZAp3SoxKCNIMwQZDZD" accessTokenSecret:nil delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    if(result.success && [result isKindOfClass:[QBUUserLogInResult class]]){
        QBUUserLogInResult *loginResult = (QBUUserLogInResult *)result;
        NSLog(@"LogIn was successful, user=%@", loginResult.user);
    }else{
	NSLog(@"errors=%@", result.errors);
    }
}

Online\Offline status

Each user has lastRequestAt field - the last user activity time (last query time). You can use it to determine if user online or offline now. For example:

 
NSInteger currentTimeInterval = [[NSDate date] timeIntervalSince1970];
NSInteger userLastRequestAtTimeInterval   = [[user lastRequestAt] timeIntervalSince1970];
 
// if user didn't do anything last 5 minutes (5*60 seconds)    
if((currentTimeInterval - userLastRequestAtTimeInterval) > 5*60){ 
     // user is offline now
}

Update own profile

If you want to update your profile - just use method bellow. You can update only your own user, just put your User's ID:

Editing User

// Update User by ID
QBUUser *user = [QBUUser user];
user.ID = 292; // you currently signed in user ID
user.tags = [NSArray arrayWithObjects:@"man", @"travel", nil];
user.website = @"www.mysite.com";
 
[QBUsers updateUser:user delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result*)result{
    // Update User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult* res = (QBUUserResult*)result;
        NSLog(@"User was edited successful, user=%@", res.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }
}

Update profile picture (avatar)

To update user profile picture you have to do:

  1. Upload new picture to Content module
  2. Connect picture to user through user's blobID field
// Upload new avatar to Content module
NSData *avatar = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"myAvatar" ofType:@"png"]];
//
[QBContent TUploadFile:file fileName:@"MyAvatar" contentType:@"image/png" isPublic:NO delegate:self];
 
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
 
    // success result
    if(result.success){
        // Upload file result
        if([result isKindOfClass:QBCFileUploadTaskResult.class]){
 
            // get uploaded file 
            QBCFileUploadTaskResult *res = (QBCFileUploadTaskResult *)result;
            NSUInteger uploadedFileID = res.uploadedBlob.ID;
 
            // Connect image to user
            QBUUser *user = [QBUUser user];
            user.ID = 300;
            user.blobID = uploadedFileID;
 
            [QBUsers updateUser:user delegate:self];
 
        // Update user result
        }else if([result isKindOfClass:QBUUserResult.class]){
             // Profile picture has changed!
        }
    }else{
        NSLog(@"Errors=%@", result.errors);
    }
}

Now other users can see your avatar.

NSUInteger userProfilePictureID = user.blobID; // user - an instance of QBUUser class
 
// download user profile picture
[QBContent TDownloadFileWithBlobID:userProfilePictureID delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Download file result
    if(result.success && [result isKindOfClass:QBCFileDownloadTaskResult.class]){
        // extract image
        QBCFileDownloadTaskResult *res = (QBCFileDownloadTaskResult *)result;
        UIImage *profilePicture = [UIImage imageWithData:res.file];
    }else{
        NSLog(@"Errors=%@", result.errors);
    }
}

Reset password

If your forgot your password - you can reset it using method bellow. Email with instruction will be send to your email address.

Reset User's password.

// Reset User's password with email
[QBUsers resetUserPasswordWithEmail:@"khig@gmail.com" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    if(result.success && [result isKindOfClass:Result.class]){
        NSLog(@"Reset password OK");
    }else{
        NSLog(@"Errors=%@", result.errors);
    }
}

Sign Out

If you want to sign out - just use method bellow:

Remove User's session (logout)

[QBUsers logOutWithDelegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result*)result{
    // Sign Out User result
    if(result.success && [result isKindOfClass:[QBUUserLogOutResult class]]){
        NSLog(@"User was logged out successful");
    }
}

Retrieve users

There are lots of methods to retrieve users:

  • Retrieve all Users
  • Retrieve Users by IDs
  • Retrieve Users by Logins
  • Retrieve Users by Emails
  • Retrieve Users by Phone numbers
  • Retrieve Users by Tags. Tags like groups, in which we can group users
  • Retrieve Users with full name
  • Retrieve User by ID
  • Retrieve User by login
  • Retrieve User by Facebook ID
  • Retrieve User by Twitter ID
  • Retrieve User by email
  • Retrieve User by external ID. You can connect user form 3d party system to QuickBlox user through external ID.


Retrieve all Users

You can use page parameters like:

  • perPage - how many users will contain each page (max 100)
  • page - current returned page
PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 50;
pagedRequest.page = 1;
 
[QBUsers usersWithPagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get Users result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users by IDs

You can use page parameters like:

  • perPage - how many users will contain each page (max 100)
  • page - current returned page
PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 50;
pagedRequest.page = 1;
 
[QBUsers usersWithIDs:@"300,298" pagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get Users result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users by Logins

You can use page parameters like:

  • perPage - how many users will contain each page (max 100)
  • page - current returned page
PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 50;
pagedRequest.page = 1;
 
[QBUsers usersWithLogins:@[@"emma", @"Javck"] pagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get Users result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users by Emails

You can use page parameters like:

  • perPage - how many users will contain each page (max 100)
  • page - current returned page
PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 50;
pagedRequest.page = 1;
 
[QBUsers usersWithEmails:@[@"Javck@mail.com", @"abc@gmail.com"] pagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get Users result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users by Phone numbers

You can use page parameters like:

  • perPage - how many users will contain each page (max 100)
  • page - current returned page
PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 50;
pagedRequest.page = 1;
 
[QBUsers usersWithPhoneNumbers:@[@0995673456, @784893332] pagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get Users result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users by tags

[QBUsers usersWithTags:[NSArray arrayWithObjects:@"man", @"travel", nil] delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve Users with full name

PagedRequest *pagedRequest = [PagedRequest request];
pagedRequest.perPage = 1;
pagedRequest.page = 1;
 
[QBUsers usersWithFullName:@"Javck Bold" pagedRequest:pagedRequest delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserPagedResult class]]){
        QBUUserPagedResult *usersResult = (QBUUserPagedResult *)result;
        NSLog(@"Users=%@", usersResult.users);
        //
        NSLog(@"Page parameters: currentPage %d, totalPages %d, perPage %d, totalEntries %d",
                  usersResult.currentPage,
                  usersResult.totalPages,
                  usersResult.perPage,
                  usersResult.totalEntries);
    }else{
        NSLog("errors=%@", result.errors);
    }
}

Retrieve User by ID

[QBUsers userWithID:292 delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Retrieve User by login

[QBUsers userWithLogin:@"Javck" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Retrieve User by facebook ID

[QBUsers userWithFacebookID:@"124343453463463" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Retrieve User by twitter ID

[QBUsers userWithFacebookID:@"124343453463463" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Retrieve User by email

[QBUsers userWithEmail:@"Javck@mail.com" delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Retrieve User by external ID

[QBUsers userWithExternalID:555 delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result *)result{
    // Get User result
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        QBUUserResult *userResult = (QBUUserResult *)result;
        NSLog(@"User=%@", userResult.user);
    }else{
        NSLog(@"errors=%@", result.errors);
    }	
}

Delete user

If you need, you can delete themselves using methods bellow:

Delete User by ID

[QBUsers deleteUserWithID:4845 delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result*)result{
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        // OK, do something
    }else{
        NSLog(@"errors=%@", result.errors);
    }
}

Delete User by external ID

[QBUsers deleteUserWithExternalID:555 delegate:self];
 
#pragma mark -
#pragma mark QBActionStatusDelegate
 
- (void)completedWithResult:(Result*)result{
    if(result.success && [result isKindOfClass:[QBUUserResult class]]){
        // OK, do something
    }else{
        NSLog(@"errors=%@", result.errors);
    }
}

Integrate QuickBlox with your existing User Base

If you want to integrate QuickBlox, but you have already your User Base, you can use externalUserID field. Just set it during QuickBlox user registration:

QBUUser *user = [QBUUser user];      
user.login = @"Javck";
user.password = @"javckpassword";
user.externalUserID = 758902384; // ID of user from your own user base
 
[QBUsers signUp:user delegate:self];

Next you can retrieve QuickBlox user by external ID by user ID from your user base and use QuickBlox platform features.

Comments

Feel free to comment on this page using the form below.

blog comments powered by Disqus
Go up