I'm working on an app that uses the FB static sdk corrected for ARC.  The user 
logs in, but the thread never gets to fbDidLogin.  Also, when I get the 
accessToken, it's null.  I really hope someone sees an issue with the following:

my ImportPic2VC.m: *********************************************
#import "ImportPic2ViewController.h"

@interface ImportPic2ViewController ()
@property (nonatomic, strong) NSMutableDictionary * userPermissions;
@end

@implementation ImportPic2ViewController



@synthesize facebook;
@synthesize userPermissions = _userPermissions;

- (void)viewDidLoad
{
    [super viewDidLoad];
    //ImportPic2AppDelegate *delegate = (ImportPic2AppDelegate 
*)[[UIApplication sharedApplication] delegate];
    //[[delegate facebook] = [[Facebook alloc] initWithAppId:@"224207854355440" 
andDelegate:self];
    facebook = 
[[Facebook alloc] initWithAppId:@"224207854355440" andDelegate:self];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = 
[defaults objectForKey:@"FBExpirationDateKey"];
    }
    if (![facebook isSessionValid]) {
        [facebook authorize:nil];
    }
    self.userPermissions = [[NSMutableDictionary alloc] initWithCapacity:1];
    [self.userPermissions setObject:@"1" forKey:@"publish_stream"];
    [self.userPermissions setObject:@"1" forKey:@"publish_actions"];
    [self.userPermissions setObject:@"1" forKey:@"photo_upload"];
    
}

- (IBAction)ImageButtonPressed:(id)sender {
    NSLog(@"ImageButtonPressed");
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    NSLog(@"accessToken:%@", facebook.accessToken);
    
    [defaults synchronize];   
    [self apiGraphUserPermissions];
}

- (void)apiGraphUserPermissions {
    /*
     * This method is called to store the photo permissions
     * in the app session after the permissions have been updated.
     */
         
    [facebook requestWithGraphPath:@"me/permissions" andDelegate:self];
    [self apiGraphUserPhotosPost];
}

/*
 * Graph API: Upload a photo. By default, when using me/photos the photo is 
uploaded
 * to the application album which is automatically created if it does not exist.
 */
- (void)apiGraphUserPhotosPost {
    NSLog(@"This is important.  Should see this logged. MDC");
    //check if need permissions or not
    //this is what checkin one does//////////////////////
    //HackbookAppDelegate *delegate = (HackbookAppDelegate *)[[UIApplication 
sharedApplication] delegate];
    //if ([[delegate userPermissions] objectForKey:@"user_checkins"]) {
    //    [self apiGraphUserCheckins];
    //} else {
    //    currentAPICall = kDialogPermissionsCheckinForRecent;
    //    [self apiPromptCheckinPermissions];
    //}
    /////////////////////////////////
    
    //[self showActivityIndicator];
    //currentAPICall = kAPIGraphUserPhotosPost;
    //HackbookAppDelegate *delegate = (HackbookAppDelegate *)[[UIApplication 
sharedApplication] delegate];
    //switch this over to be chg permission if need it
    //
    //if ([self.userPermissions objectForKey:@"photo_upload"]) { 
        //we're where we need to be with permissions//[self 
apiGraphUserPhotosPost]; //MDC
    //    NSLog(@"That's nice. Nothing to change.");
    //} else {
        //add needed permissions, with prompt
        //currentAPICall = kDialogPermissionsCheckinForRecent; //done already
        [self apiPromptPhotoAddPermissions]; //MDC
    //}
    //end of new MDC code
    // Download a sample photo ??MDC - sub my photo in here later
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
    
    NSURL *url = 
[NSURL URLWithString:@"http://www.facebook.com/images/devsite/iphone_connect_btn.jpg";];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *img  = [[UIImage alloc] initWithData:data];
    NSMutableDictionary *params = 
[NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   img, @"picture",
                                   nil];
    //[img release];
    
    [facebook requestWithGraphPath:@"me/photos"
                                    andParams:params
                                andHttpMethod:@"POST"
                                  andDelegate:self];
    //[img release];
}

/*
 * Dialog: Authorization to grant the app photo add permissions. - MDC
 */
- (void)apiPromptPhotoAddPermissions { 
    NSArray *photoAddPermissions = 
[[NSArray alloc] initWithObjects:@"publish_stream", @"publish_actions", @"photo_upload",nil]; //MDC
    [facebook authorize:photoAddPermissions];
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- 
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] 
== UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation 
!= UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

- (BOOL)handleOpenURL:(NSURL *)url
{
    return [facebook handleOpenURL:url];
}

// For iOS 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [facebook handleOpenURL:url]; 
}

- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
    
    [facebook dialog:@"feed" andDelegate:self];    
}

- (void) fbDidLogout {
    // Remove saved authorization information if it exists
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"]) {
        [defaults removeObjectForKey:@"FBAccessTokenKey"];
        [defaults removeObjectForKey:@"FBExpirationDateKey"];
        [defaults synchronize];
    }
}

-(void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt {
    NSLog(@"token extended");
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:accessToken forKey:@"FBAccessTokenKey"];
    [defaults setObject:expiresAt forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

-(void)fbDidNotLogin:(BOOL)cancelled
{
    NSLog(@"did not login");
}

-(void)request:(FBRequest *)request didLoad:(id)result
{
    if ([result isKindOfClass:[NSArray class]]) {
        //result = [result objectAtIndex:0];
        self.userPermissions = [[result objectForKey:@"data"] objectAtIndex:0];
    }
    NSLog(@"Result of API call: %@", result);
}

-(void)request:(FBRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"Failed with error: %@", [error localizedDescription]);
    NSLog(@"Err details: %@", [error description]);
}

/*
- (void)storeAuthData:(NSString *)accessToken expiresAt:(NSDate *)expiresAt {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:accessToken forKey:@"FBAccessTokenKey"];
    [defaults setObject:expiresAt forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}*/

@end


my ImportPic2VC.h: 
**************************************************************
#import <UIKit/UIKit.h>
#import "FBConnect.h"

@interface ImportPic2ViewController : UIViewController <FBRequestDelegate,
FBDialogDelegate,
FBSessionDelegate>{
    Facebook *facebook;
}
@property (nonatomic, retain) Facebook *facebook;
@end

my 
ImportPic2AppDelegate.m***********************************************************
#import "ImportPic2AppDelegate.h"
#import "ImportPic2ViewController.h"
//#import "FBConnect.h"

//@interface FacebookAppDelegate : UIResponder <UIApplicationDelegate>

//@end

@implementation ImportPic2AppDelegate

//@synthesize facebook;
//@synthesize userPermissions;
@synthesize viewController = _viewController;
@synthesize window = _window;

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //ImportPic2ViewController *importPic2VC = [[ImportPic2ViewController 
alloc] init];
    //UINavigationController *navController = [[UINavigationController alloc] 
initWith
    //self.viewController = [[FacebookV
                            
    //facebook = [[Facebook alloc] initWithAppID:@"224207854355440" 
andDelegate:(id)self];
    //self.window.rootViewController = self.viewController;
    //[self.window makeKeyAndVisible];
     
    returnYES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return[[_viewControllerfacebook] handleOpenURL:url];
}

// For iOS 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return[[_viewControllerfacebook] handleOpenURL:url]; 
}
- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive 
state. This can occur for certain types of temporary interruptions (such as an 
incoming phone call or SMS message) or when the user quits the application and 
it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle 
down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate 
timers, and store enough application state information to restore your 
application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called 
instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the inactive 
state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Restart any tasks that were paused (or not yet started) while the 
application was inactive. If the application was previously in the background, 
optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if 
appropriate. See also applicationDidEnterBackground:.
}

- (void)fbDidLogin {
    //[self showLoggedIn];
    //ImportPicAppDelegate *delegate = (ImportPicAppDelegate *)[[UIApplication 
sharedApplication] delegate]; 
    //[self storeAuthData:[[delegate facebook] accessToken] 
expiresAt:[[delegate facebook] expirationDate]];
    //NSLog(@"Permissions granted.");
    
    //[pendingApiCallsController userDidGrantPermission];
}

-(void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt {
    NSLog(@"token extended");
    //[self storeAuthData:accessToken expiresAt:expiresAt];
}

/**
 * Called when the user canceled the authorization dialog.
 */

-(void)fbDidNotLogin:(BOOL)cancelled {
    NSLog(@"permission not granted");
    //[pendingApiCallsController userDidNotGrantPermission];
}

/**
 * Called when the request logout has succeeded.
 */
- (void)fbDidLogout {
    //pendingApiCallsController = nil;
    
    // Remove saved authorization information if it exists and it is
    // ok to clear it (logout, session invalid, app unauthorized)
    NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];
    [defaults removeObjectForKey:@"FBAccessTokenKey"];
    [defaults removeObjectForKey:@"FBExpirationDateKey"];
    [defaults synchronize];
    
    //[self showLoggedOut];
}

/**
 * Called when the session has expired.
 */
- (void)fbSessionInvalidated {
    UIAlertView *alertView = [[UIAlertView alloc]
                              initWithTitle:@"Auth Exception"
                              message:@"Your session has expired."
                              delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil,
                              nil];
    [alertView show];
    //[alertView release];
    [selffbDidLogout];
}

#pragma mark - FBRequestDelegate Methods
/**
 * Called when the Facebook API request has returned a response.
 *
 * This callback gives you access to the raw response. It's called before
 * (void)request:(FBRequest *)request didLoad:(id)result,
 * which is passed the parsed response object.
 */
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse 
*)response {
    //NSLog(@"received response");
}

/**
 * Called when a request returns and its response has been parsed into
 * an object.
 *
 * The resulting object may be a dictionary, an array or a string, depending
 * on the format of the API response. If you need access to the raw response,
 * use:
 *
 * (void)request:(FBRequest *)request
 *      didReceiveResponse:(NSURLResponse *)response
 */
- (void)request:(FBRequest *)request didLoad:(id)result {
    if ([result isKindOfClass:[NSArray class]]) {
        result = [result objectAtIndex:0];
    }
    // This callback can be a result of getting the user's basic
    // information or getting the user's permissions.
    if ([result objectForKey:@"name"]) {
        // If basic information callback, set the UI objects to
        // display this.
        /*
        nameLabel.text = [result objectForKey:@"name"];
        // Get the profile image
        UIImage *image = [UIImage imageWithData:[NSData 
dataWithContentsOfURL:[NSURL URLWithString:[result objectForKey:@"pic"]]]];
        
        // Resize, crop the image to make sure it is square and renders
        // well on Retina display
        float ratio;
        float delta;
        float px = 100; // Double the pixels of the UIImageView (to render on 
Retina)
        CGPoint offset;
        CGSize size = image.size;
        if (size.width > size.height) {
            ratio = px / size.width;
            delta = (ratio*size.width - ratio*size.height);
            offset = CGPointMake(delta/2, 0);
        } else {
            ratio = px / size.height;
            delta = (ratio*size.height - ratio*size.width);
            offset = CGPointMake(0, delta/2);
        }
        CGRect clipRect = CGRectMake(-offset.x, -offset.y,
                                     (ratio * size.width) + delta,
                                     (ratio * size.height) + delta);
        UIGraphicsBeginImageContext(CGSizeMake(px, px));
        UIRectClip(clipRect);
        [image drawInRect:clipRect];
        UIImage *imgThumb = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [profilePhotoImageView setImage:imgThumb];
        */
        //[self apiGraphUserPermissions];
    } else {
        // Processing permissions information
        //ImportPicAppDelegate *delegate = (ImportPicAppDelegate 
*)[[UIApplication sharedApplication] delegate];
        //[delegate setUserPermissions:[[result objectForKey:@"data"] 
objectAtIndex:0]];
    }
}

/**
 * Called when an error prevents the Facebook API request from completing
 * successfully.
 */
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
    NSLog(@"Err message: %@", [[error userInfo] objectForKey:@"error_msg"]);
    NSLog(@"Err code: %d", [error code]);
}

@end

my ImportPic2AppDelegate.h****************************************************
#import <UIKit/UIKit.h>
#import "FBConnect.h"
#import "ImportPic2ViewController.h"

@interfaceImportPic2AppDelegate : UIResponder<UIApplicationDelegate, 
UIAlertViewDelegate>
{
    //Facebook *facebook;
    //NSMutableDictionary *userPermissions;
}

@property(strong, nonatomic) UIWindow*window;
@property(strong, nonatomic) ImportPic2ViewController*viewController;
//@property (nonatomic, retain) Facebook *facebook;
//@property (nonatomic, retain) NSMutableDictionary *userPermissions;

@end
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to