Je sais comment aimer des photos/commentaires sur Facebook. Mais je veux aimer une photo Facebook page par le biais de mon application. Est-ce possible ? Si oui, quelqu'un peut-il me donner quelques suggestions ?
Réponses
Trop de publicités?C'est un problème. Si vous pouviez le faire, vous seriez en mesure d'"aimer" une page de manière programmatique sans que l'utilisateur ne soit nécessairement conscient de ce qui se passe. Cela violerait les CGU de Facebook.
Je pense que vous feriez mieux de placer simplement un bouton "J'aime" dans votre application et de laisser vos utilisateurs décider s'ils veulent cliquer dessus.
Quelques postes connexes -
J'ai écrit une méthode que j'appelle pour que vous puissiez aimer votre page en donnant son url dans la méthode. Pour cette méthode, vous devez utiliser facebook sdk et ajouter quelques fichiers facebook dépréciés comme.
#import "Facebook.h"
#import "FBCustomLoginDialog.h"
#import "Accounts/Accounts.h"
C'est à vous de trouver ces fichiers et de les utiliser. De toute façon, c'est un code de travail pour une page comme celle-ci.
-(void)like
{
NSString *likePage=@"http://in.yahoo.com/?p=us"; // here you page url
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
likePage, @"object",[[NSUserDefaults standardUserDefaults] valueForKey:@"token"],@"access_token",
nil];
[FBRequestConnection startWithGraphPath:@"/me/og.likes" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"liked with id %@",[result valueForKey:@"id"]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
NSLog(@"result is %@",result);
}];
}
- (IBAction)likepageonFB:(id)sender
{
if ([[FBSession activeSession] isOpen]) {
[self like];
}else
{
[appDelegate openSession];
}
}
Voici le code utilisé dans le fichier délégué de l'application ....
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[LikeAppViewController alloc] initWithNibName:@"LikeAppViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
// To-do, show logged in view
// [self openSession];
} else {
// No, display the login page.
[self showLoginView];
}
return YES;
}
#pragma mark- Facebook Methods
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
{
[[NSUserDefaults standardUserDefaults] setValue:[[FBSession activeSession] accessToken] forKey:@"token"];
NSLog(@"token is %@",[[FBSession activeSession] accessToken]);
[self.viewController like];
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[self showLoginView];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
- (void)openSession
{
NSLog(@"open session called ");
NSArray *permissions=[[NSArray alloc] initWithObjects:@"publish_stream",@"publish_actions",@"user_likes",@"user_about_me",nil];
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES completionHandler:^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
- (void)showLoginView
{
[self.viewController presentedViewController];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [FBSession.activeSession handleOpenURL:url];
}
- (void)fbDialogLogin:(NSString*)token expirationDate:(NSDate*)expirationDate
{
NSLog(@"expiry date is %@",expirationDate);
}
utiliser ce fichier FBCustomLoginDialog.h y FBCustomLoginDialog.m
Fb like Widget peut être intégré dans notre application. Il suffit d'ajouter un webView et de récupérer l'élément Code html/URL du widget Fb Like ici .
dans ViewController.h où vous voulez ajouter le bouton fb like :
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController <UIWebViewDelegate>
@property (strong, nonatomic) UIWebView * fbLikeWebView;
-(void)embedFBLikeButton;
@end
dans TestViewController.m
#import "AboutUsViewController.h"
@implementation AboutUsViewController
@synthesize fbLikeWebView = _fbLikeWebView;
- (void)viewDidLoad
{
[super viewDidLoad];
//Add this code for FbLike Webview
self.fbLikeWebView = [[UIWebView alloc] initWithFrame: CGRectMake(100.0, 50.0, 55.0, 70.0)];
_fbLikeWebView.opaque = NO;
_fbLikeWebView.backgroundColor = [UIColor clearColor];
_fbLikeWebView.delegate = self;
[self.view addSubview:_fbLikeWebView];
for (UIScrollView *subview in _fbLikeWebView.subviews)
{
if ([subview isKindOfClass:[UIScrollView class]]) {
subview.scrollEnabled = NO;
subview.bounces = NO;
}
}
}
ensuite, dans la méthode ViewWillAppear, appelez la méthode enbeddFBLikeButton pour ajouter le bouton fbLike wigdet sur la vue web :
-(void)viewWillAppear:(BOOL)animated
{
[self embedFBLikeButton];
[_fbLikeWebView reload];
}
-(void)embedFBLikeButton
{
NSString *facebookUrl = //here paste the url you get from fb developer link above;
[self.fbLikeWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:facebookUrl]]];
}
Vous vous êtes conformé à UIWebViewDelegate maintenant c'est le tour de définir la méthode edelegate ici :
#pragma mark - WebView Delgate Methods
- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.lastPathComponent isEqualToString:@"login.php"])
{
[self login];
return NO;
}
return YES;
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[_fbLikeWebView stopLoading];
}
Cette méthode permet de connecter l'utilisateur au compte facebook :
- (void)login
{
[FBSession setActiveSession: [[FBSession alloc] initWithPermissions:@[@"publish_actions", @"publish_stream", @"user_photos"]]];
[[FBSession activeSession] openWithBehavior: FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
switch (status) {
case FBSessionStateOpen:
// call the legacy session delegate
//Now the session is open do corresponding UI changes
if (session.isOpen) {
FBRequest *me = [FBRequest requestForMe];
[me startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *my,
NSError *error) {
if (!my) {
NSLog(@"Facebook error:\n%@", error.description);
[[[UIAlertView alloc] initWithTitle: @"Error"
message: @"Facebook Login error."
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil, nil] show];
return;
}
}];
[_fbLikeWebView reload];
[[[UIAlertView alloc] initWithTitle: @""
message: @"Successfully Login. Please click on like button"
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil, nil] show];
}
break;
case FBSessionStateClosedLoginFailed:
{
[_fbLikeWebView reload];
}
break;
default:
break; // so we do nothing in response to those state transitions
}
}];
}