私はiPhoneゲームを開発しています。ユーザーはFacebookのスコアを自分の投稿にしたいと思っていました。私はそれを実装することができたが、フィードを投稿するたびにFacebookのアプリにログインしていることを伝えるFacebookブックウィンドウが表示され、フィードを投稿するネックスウィンドウを表示するにはacceptをタップする必要があるプロフィールの壁。iPhone - Facebook Connect
私はFacebookのログインをスキップする必要がありますか?私はfacebookがメソッドを承認し、facebookのフィードメソッドに直接ジャンプすることを意味しますか?
ここに私が持っているものはありますが、セッションは常に無効です! fbDidLoginと呼ばれることは決してありませんし、デバッグにはMESにこの種のエラー与える:
void SendDelegateMessage(NSInvocation*): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
をそして私はログアウトしてから餌しようとした場合、私は2回、セッション用と飼料のための1つをログインする必要があります。
これはコードです:
#import "FacebookConnect.h"
static NSString* kAppId = @"414427041919461"; // Your Facebook app ID here
@implementation FacebookConnect
@synthesize facebook = _facebook;
#pragma mark -
#pragma mark Singleton Variables
static FacebookConnect *singletonDelegate = nil;
#pragma mark -
#pragma mark Singleton stuff
- (id)init {
if (!kAppId) {
NSLog(@"MISSING APP ID!!!");
exit(1);
return nil;
}
if ((self = [super init])) {
_facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
_facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
_facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
}
return self;
}
+(FacebookConnect *) sharedFacebook
{
@synchronized([FacebookConnect class])
{
if(!singletonDelegate) [[self alloc] init];
return singletonDelegate;
}
return nil;
}
+(id)alloc
{
@synchronized ([FacebookConnect class])
{
NSAssert(singletonDelegate == nil, @"Attempted to allocate a second instance of the Game Manager singleton");
singletonDelegate = [super alloc];
return singletonDelegate;
}
return nil;
}
#pragma mark -
#pragma mark Singleton methods
-(void) logout
{
[_facebook logout];
}
-(void) feedWithScore:(int) _s andLevel:(int) _l
{
if (![_facebook isSessionValid]) {
NSLog(@"Session invalid - Authorize");
/*NSArray *permissions = [[NSArray alloc] initWithObjects:@"user_likes", @"read_stream",nil];
[_facebook authorize:permissions];
[permissions release];*/
[_facebook authorize:nil];
}
[_facebook dialog:@"feed" andDelegate:self];
}
#pragma mark -
#pragma mark Facebook implementations
// Pre iOS 4.2 support
- (BOOL)application:(UIApplication *)application 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 {
NSLog(@"Login OK");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[_facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[_facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
- (void) fbDidLogout {
NSLog(@"Log out");
// Remove saved authorization information if it exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]) {
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
}
- (void)dialogDidComplete:(FBDialog *)dialog{ NSLog(@"Login OK"); }
- (void)dialogDidNotComplete:(FBDialog *)dialog{}
- (void)dialogCompleteWithUrl:(NSURL *)url{}
- (void)dialog:(FBDialog*)dialog didFailWithError:(NSError *)error{}
- (BOOL)dialog:(FBDialog*)dialog shouldOpenURLInExternalBrowser:(NSURL *)url{return NO;}
- (void)fbDidNotLogin:(BOOL)cancelled{}
- (void)fbDidExtendToken:(NSString*)accessToken
expiresAt:(NSDate*)expiresAt{}
- (void)fbSessionInvalidated{}
#pragma mark -
#pragma mark Dealloc
-(void) dealloc{
[super dealloc];
[_facebook release];
}
@end
:
はこちらのドキュメントを参照してください。それは毎回facebookがpermisを必要とすることではないシオンそれは、ユーザーが私のFacebookのアプリと一緒にログインしたことを単に示すウィンドウがあるということです。 – marcg11
あなたは何を意味するのか分かりません。必要なすべてのアクセス権を要求する場合は、一度許可する必要があります。アプリが読み込まれるたびに、そのキーを確認するだけです。私の編集を参照してください。 –