2012-03-19 38 views
0

我正在使用Facebook Connect與我的應用程序。一切都已經建立,所有的代碼都可以工作。在昨天左右,我可以用我的應用程序登錄,然後發佈內容和其他功能。我不記得做出任何真正的改變。和往常一樣,每當我按下登錄按鈕,它就會進入一個Safari頁面,在那裏我必須確認我想要使用這個應用程序,並說明我登錄的是誰。如果我按下確定,它會返回到應用程序。在整個過程中,在應用程序中,Facebook從不登錄。請記住:只是昨天這個工作,我不會回想起任何改變!這裏是連接如何開始:fbDidLogin未調用,handleURL未調用

-(IBAction)connectToFacebook { 

[loginButton setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal]; 
facebook = [[Facebook alloc] initWithAppId:@"387500177929927" 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]; 
}  
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(makeVisibleButtons) userInfo:nil repeats:NO]; 
[timer setAccessibilityHint:@"timer"]; 
} 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // JUST SO THAT HANDLE URL CAN GET CALLED 

return YES; 


} 

所以我按了一個按鈕來調用這個IBAction。 NSTimer是不相關的,它只是爲了一些按鈕的外觀。現在,這兩種方法永遠不會被調用(當我登錄吧):

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
ConnectToFB *connect = [[ConnectToFB alloc] init]; 
return [connect.facebook handleOpenURL:url]; 
NSLog(@"url"); 
[connect release]; 
} 

- (void)fbDidLogin { 

NSLog(@"log in"); 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
[defaults synchronize];  
} 

應用程序ID是最新的,並且在信息的plist我的URL方案也是最新的。這裏有什麼問題?

回答

0

我想你的應用程序沒有得到任何access_token登錄到Facebook。它可能會給你null。

如果它是problem.Then鉤到FBDialog和

改變這一點:

- (NSString *) getStringFromUrl: (NSString*) url needle:(NSString *) needle { 
NSString * str = nil; 
NSRange start = [url rangeOfString:needle]; 
if (start.location != NSNotFound) { 
    // confirm that the parameter is not a partial name match 
    unichar c = '?'; 
    if (start.location != 0) { 
     c = [url characterAtIndex:start.location - 1]; 
    } 
    if (c == '?' || c == '&') {   
     NSRange end = [[url substringFromIndex:start.location+start.length] rangeOfString:@"&"]; 
     NSUInteger offset = start.location+start.length; 
     str = end.location == NSNotFound ? 
      [url substringFromIndex:offset] : 
      [url substringWithRange:NSMakeRange(offset, end.location)]; 
     str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    } 
}  
return str; 
} 

與此:

- (NSString *) getStringFromUrl: (NSString*) url needle:(NSString *) needle { 
NSString * str = nil; 
NSRange start = [url rangeOfString:needle]; 
if (start.location != NSNotFound) { 
    NSRange end = [[url substringFromIndex:start.location+start.length] rangeOfString:@"&"]; 
    NSUInteger offset = start.location+start.length; 
    str = end.location == NSNotFound 
    ? [url substringFromIndex:offset] 
    : [url substringWithRange:NSMakeRange(offset, end.location)]; 
    str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
} 

return str; 
} 

它可能會解決你的問題。

+0

我從來沒有實現該方法。我添加了它,但它仍然不起作用 – MCKapur 2012-03-20 11:50:45

+0

有沒有訪問令牌,而從Safari瀏覽器回撥? – arindam 2012-03-20 13:28:27

+0

我不確定你的意思,我的應用程序確實直接進入safari,當用戶在safari Facebook對話框中按下ok時,它會返回到應用程序。你是什​​麼意思,「你有沒有訪問令牌」@Sunny – MCKapur 2012-03-20 22:41:17