Friday 15 April 2016

Linkdin Login in ios application

In one of my application i have to provide option that user can login though linkdn.

First of all make 

1) Add linkedin-sdk framework in your project

2) Get access token from this method:

[LISDKSessionManager createSessionWithAuth:[NSArray arrayWithObjects:LISDK_BASIC_PROFILE_PERMISSION, LISDK_EMAILADDRESS_PERMISSION, nil]
                                     state:@"some state"
                                     showGoToAppStoreDialog:YES
                                               successBlock:^(NSString *returnState) {

                                                   NSLog(@"%s","success called!");
                                                   LISDKSession *session = [[LISDKSessionManager sharedInstance] session];
                                                   NSLog(@"value=%@ isvalid=%@",[session value],[session isValid] ? @"YES" : @"NO");
                                                   NSMutableString *text = [[NSMutableString alloc] initWithString:[session.accessToken description]];
                                                   [text appendString:[NSString stringWithFormat:@",state=\"%@\"",returnState]];
                                                   NSLog(@"Response label text %@",text);
                                                   _responseLabel.text = text;
                                                   self.lastError = nil;
                                                   // retain cycle here?
                                                   [self updateControlsWithResponseLabel:NO];

                                               }
                                                 errorBlock:^(NSError *error) {
                                                     NSLog(@"%s %@","error called! ", [error description]);
                                                     self.lastError = error;
                                                     //  _responseLabel.text = [error description];
                                                     [self updateControlsWithResponseLabel:YES];
                                                 }
     ];
   
3) if you want id,first-name,last-name,maiden-name,email-address after authorization you can apply this code:

   [[LISDKAPIHelper sharedInstance] apiRequest:https://www.linkedin.com/v1/people/~:(id,first-name,last-name,maiden-name,email-address)
                                             method:method
                                               body:nil
                                            success:^(LISDKAPIResponse *response) {
                                                NSLog(@"success called %@", response.data);
                                                AppDelegate *myAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
                                                dispatch_sync(dispatch_get_main_queue(), ^{
                                                    [myAppDelegate showAPIResponsePage:method
                                                                                status:response.statusCode
                                                                               request:_resourceTextField.text
                                                                              response:response.data];
                                                });
                                            }
                                              error:^(LISDKAPIError *apiError) {
                                                  NSLog(@"error called %@", apiError.description);
                                                   AppDelegate *myAppDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
                                                  dispatch_sync(dispatch_get_main_queue(), ^{
                                                      LISDKAPIResponse *response = [apiError errorResponse];
                                                      NSString *errorText;
                                                      if (response) {
                                                          errorText = response.data;
                                                      }
                                                      else {
                                                          errorText = apiError.description;
                                                      }
                                                  [myAppDelegate showAPIResponsePage:[self getMethod]
                                                                              status:[apiError errorResponse].statusCode
                                                                             request:_resourceTextField.text
                                                                            response:errorText];
                                                  });
                                              }];

 
you can check your method output by this link:

https://apigee.com/console/linkedin
 

Get the crash log from console

I am developing one of application which crashes in 64 devices  which i don't have. My client is outside from company and i have to upload the build and check the log . He has to mail me crash log.

For that i apply this functionality which  anyone can use.

This function can be used to write the log in document folder and then email them.

    - (IBAction)redirectLogToDocuments
        {
            if ([MFMailComposeViewController canSendMail]==TRUE) {


            NSArray *allPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [allPaths objectAtIndex:0];
            NSString *pathForLog = [documentsDirectory stringByAppendingPathComponent:@"clipboard.txt"];

            freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

            NSString *emailTitle = @"Email Log";
            // Email Content
            NSString *messageBody = @"Check Log to view from where application stop";
            // To address
            NSArray *toRecipents = [NSArray arrayWithObject:@"support@appcoda.com"];

            MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
            mc.mailComposeDelegate = self;
            [mc setSubject:emailTitle];
            [mc setMessageBody:messageBody isHTML:NO];
            mc.modalPresentationStyle = UIModalPresentationCurrentContext;
            [mc setToRecipients:toRecipents];
            NSData *fileData = [NSData dataWithContentsOfFile:pathForLog];
            [mc addAttachmentData:fileData mimeType:@"text/plain"  fileName:@"clipboard.txt"];

            // Present mail view controller on screen
            //[self presentViewController:mc animated:YES completion:nil];
            [self presentViewController:mc animated:YES completion:^{

            }];
            } else {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:@"Please configure mail" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
                [alert show];
            }

        }


  - (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    {
        NSString *strMessage;
        switch (result)
        {
            case MFMailComposeResultCancelled:
                NSLog(@"Mail cancelled");
                strMessage = @"Mail cancelled";
                break;
            case MFMailComposeResultSaved:
                NSLog(@"Mail saved");
                strMessage = @"Mail save";
                break;
            case MFMailComposeResultSent:
                strMessage = @"Mail sent";
                NSLog(@"Mail sent");
                break;
            case MFMailComposeResultFailed:
                NSLog(@"Mail sent failure: %@", [error localizedDescription]);
                 strMessage = @"Mail sent failure";
                break;
            default:
                break;
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:strMessage delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [self dismissViewControllerAnimated:YES completion:NULL];
    }

Thats it you are done now you can mail yout whole log of application by mail.

Happy Coding!!!!