Facebook ヘルパーからいくつかのデリゲート メソッドを実装するビュー コントローラーがあります。アイコン(アイコンなど)をタップすると、アプリがFacebookモバイルWebに切り替わり、ログインします。その後、アプリを元に戻しますが、アプリは書き込みのためにより多くの権限を必要とするため、facebook mobile web (safari) が再び切り替わります。[OK] を押すと、アクションが完了します。ただし、View Controller のデリゲート メソッドは呼び出されません。私はデバッグし、その時点でFacebookのアクションが発生していることを確認できます。変数「デリゲート」はnilです。私のView Controllerには特別なものがあります。バックグラウンドから戻るたびに、別のビュー コントローラー (スポンサー画面用) を提示します。表示時間は約 3 秒で、スポンサー画面は消えます。
デリゲート メソッドを呼び出すにはどうすればよいですか?
私のビューコントローラで
[FacebookHelper sharedInstance].fbDelegate = self;
[[FacebookHelper sharedInstance] likeCommentFacebook:!isLike withCommentID:message.messageID];
私の Facebook ヘルパーでは:
`- (void) likeCommentFacebook:(BOOL)isLike withCommentID:(NSString *)commentID {
//- check if we are already processed by the loginCallback
if (_loginCallbackInvocation == nil) {
//- create NSInvocation reference to this method
NSInvocation * nsi = [WKTools invocationWithTarget:self selector:_cmd retainArguments:TRUE argumentAddresses:&isLike, &commentID];
//- ensure user has been properly identified and process with authentication if required
[self processLogin:nsi];
}
//- check if user session is valid
if ([[FBSession activeSession] isOpen]) {
if (![self hasPermission:kPublishStream]) {
NSArray *permissions = [NSArray arrayWithObjects: kPublishStream,nil];
dispatch_async(dispatch_get_current_queue(), ^{
[FBSession.activeSession requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession *session, NSError *error) {
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", commentID,FB_REQUEST_LIKE];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"", MESSAGE_KEY, nil];
//- send request
if (isLike == YES) {
[self requestGraphAPI:requestUrl parameter:params httpMethod:POST_METHOD];
} else {
[self requestGraphAPI:requestUrl parameter:params httpMethod:DELETE_METHOD];
}
}];
});
} else {
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", commentID,FB_REQUEST_LIKE];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"", MESSAGE_KEY, nil];
//- send request
if (isLike == YES) {
[self requestGraphAPI:requestUrl parameter:params httpMethod:POST_METHOD];
} else {
[self requestGraphAPI:requestUrl parameter:params httpMethod:DELETE_METHOD];
}
}
} else {
if ([self isSessionCachedAndLoaded]) {
[FBSession.activeSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if (![self hasPermission:kPublishStream]) {
[[NSUserDefaults standardUserDefaults] synchronize];
NSArray *permissions = [NSArray arrayWithObjects: kPublishStream,nil];
dispatch_async(dispatch_get_current_queue(), ^{
[FBSession.activeSession requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession *session, NSError *error) {
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", commentID,FB_REQUEST_LIKE];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"", MESSAGE_KEY, nil];
DEBUGLog(@"like comment: %@",requestUrl);
//- send request
if (isLike == YES) {
[self requestGraphAPI:requestUrl parameter:params httpMethod:POST_METHOD];
} else {
[self requestGraphAPI:requestUrl parameter:params httpMethod:DELETE_METHOD];
}
}];
});
} else {
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", commentID,FB_REQUEST_LIKE];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"", MESSAGE_KEY, nil];
//- send request
if (isLike == YES) {
[self requestGraphAPI:requestUrl parameter:params httpMethod:POST_METHOD];
} else {
[self requestGraphAPI:requestUrl parameter:params httpMethod:DELETE_METHOD];
}
}
}];
}
}
}`
そしてコールバックメソッドで
if (self.fbDelegate && [self.fbDelegate respondsToSelector:@selector(likeCommentDidSuccess:)]) {
[self.fbDelegate performSelector:@selector(likeCommentDidSuccess:) withObject:dictionary];
}