从 iOS 应用程序链接到用户的 Facebook 墙

Posted

技术标签:

【中文标题】从 iOS 应用程序链接到用户的 Facebook 墙【英文标题】:Link to User's Facebook Wall From iOS App 【发布时间】:2015-03-07 15:12:11 【问题描述】:

一直在寻找指导,但我在这里和网络上找到的大部分内容是“如何从 ios 应用程序发布到 Facebook”。我的问题不同。

我有一个有多个用户的应用。

如果 user1 正在我的 iOS 应用程序上查看 user2 的个人资料,我希望在 user2 的个人资料上设置一个按钮(当被 user1 按下时)将打开 user1 的 Facebook 应用程序,以“返回”或“完成”显示 user2 的 Facebook 墙按钮将 user1 带回我的应用程序。

我认为这很容易,但我找不到任何相关信息。

    当用户在我的 iOS 应用上创建帐户时,我如何获取 URL 或信息以访问用户 Facebook Wall? 然后如何创建链接以打开 Facebook 应用并显示所述用户的 Facebook 墙?

感谢您的帮助:)

【问题讨论】:

【参考方案1】:

我想通了!

我首先遵循了这个教程:http://www.appcoda.com/ios-programming-facebook-login-sdk/

然后我根据需要对其进行了修改。

下面是我的应用程序代码

在 AppDelegate.m 中

#import <FacebookSDK/FacebookSDK.h>
...
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    ...
    [FBLoginView class];
    [FBProfilePictureView class];

...
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    return [FBAppCall handleOpenURL:url
              sourceApplication:sourceApplication];

在 CreateAccountConnectSocialMediaViewController.h 中

#import <UIKit/UIKit.h>
#import <FacebookSDK/FacebookSDK.h>

@interface CreateAccountConnectSocialMediaViewController : UIViewController <FBLoginViewDelegate>

    @property (strong, nonatomic) IBOutlet UIView *socialMediaView;
    - (IBAction)nextButton:(UIButton *)sender;
    - (IBAction)openProfileButton:(UIButton *)sender;

@end

在 CreateAccountConnectSocialMediaViewController.m 中

@interface CreateAccountConnectSocialMediaViewController ()
@property FBLoginView *fbLoginButton;
@property NSString *fbUserID;
@end

@implementation CreateAccountConnectSocialMediaViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    //Create CUSTOM FB Button
    self.fbLoginButton = [[FBLoginView alloc] init];
    for (id loginObject in self.fbLoginButton.subviews)
    
        if ([loginObject isKindOfClass:[UIButton class]])
        
            UIButton * loginButton =  loginObject;
            UIImage *loginImage = [UIImage imageNamed:@"FB_Hover.png"];
            [loginButton setBackgroundImage:loginImage forState:UIControlStateNormal];
            [loginButton setBackgroundImage:nil forState:UIControlStateSelected];
            [loginButton setBackgroundImage:nil forState:UIControlStateHighlighted];

        
        if ([loginObject isKindOfClass:[UILabel class]])
        
            UILabel *loginLabel =  loginObject;
            loginLabel.text = @"";
            loginLabel.frame = CGRectMake(0, 0, 0, 0);
        
    
    self.fbLoginButton.delegate = self;
    self.fbLoginButton.readPermissions = @[@"public_profile", @"email"];
    self.fbLoginButton.frame = CGRectMake(0, 0, 46, 46);
    [self.socialMediaView addSubview:self.fbLoginButton];



- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


//Change the ICON to denote the user is logged in
-(void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
    for (id loginObject in self.fbLoginButton.subviews)
    
        if ([loginObject isKindOfClass:[UIButton class]])
        
            UIButton *loginButton =  loginObject;
            UIImage *loginImage = [UIImage imageNamed:@"FB_Static.png"];
            [loginButton setBackgroundImage:loginImage forState:UIControlStateNormal];
            [loginButton setBackgroundImage:nil forState:UIControlStateSelected];
            [loginButton setBackgroundImage:nil forState:UIControlStateHighlighted];

        
        if ([loginObject isKindOfClass:[UILabel class]])
        
            UILabel *loginLabel =  loginObject;
            loginLabel.text = @"";
            loginLabel.frame = CGRectMake(0, 0, 0, 0);
        
    



//Grab the users Apped Scoped ID, to use in going to his/her page later
-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user
    self.fbUserID = user.objectID;


Change the ICON to denote the user is NOT logged in
-(void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView
    for (id loginObject in self.fbLoginButton.subviews)
    
        if ([loginObject isKindOfClass:[UIButton class]])
        
            UIButton * loginButton =  loginObject;
            UIImage *loginImage = [UIImage imageNamed:@"FB_Hover.png"];
            [loginButton setBackgroundImage:loginImage forState:UIControlStateNormal];
            [loginButton setBackgroundImage:nil forState:UIControlStateSelected];
            [loginButton setBackgroundImage:nil forState:UIControlStateHighlighted];

        
        if ([loginObject isKindOfClass:[UILabel class]])
        
            UILabel * loginLabel =  loginObject;
            loginLabel.text = @"";
            loginLabel.frame = CGRectMake(0, 0, 0, 0);
        
    



-(void)loginView:(FBLoginView *)loginView handleError:(NSError *)error
    NSLog(@"%@", [error localizedDescription]);



- (IBAction)nextButton:(UIButton *)sender 
    //Go to next CreateAccount View Controller
    [self performSegueWithIdentifier:@"accountCreatedSegue1" sender:self];


//Open the user's profile in the native FB App or
//the browser if the native FB app doesn't exist
- (IBAction)openProfileButton:(UIButton *)sender 
    NSString *urlString = [NSString stringWithFormat:@"fb://profile?app_scoped_user_id=%@", self.fbUserID];
    NSLog(@"urlString = %@", urlString);
    NSURL *url = [NSURL URLWithString:urlString];
    [[UIApplication sharedApplication] openURL:url];

@end

【讨论】:

以上是关于从 iOS 应用程序链接到用户的 Facebook 墙的主要内容,如果未能解决你的问题,请参考以下文章

从iOS应用程序打开Facebook页面链接

无法通过 iOS 应用程序发布到 Facebook 的深层链接

从 facebook 重定向到 ios 应用程序 - 深层链接

Firebase 动态链接不会从 iOS 中的 facebook 帖子导航到 ios app/appstore

iOS 中的 Facebook 深度链接

从 iOS 应用程序在 Facebook 墙上发布纯文本