web-dev-qa-db-ja.com

iOSのネイティブFacebookアプリでFacebookリンクを開く

ネイティブのFacebookアプリがiPhoneにインストールされている場合。アプリからネイティブFacebookアプリへのFacebookリンクを開くにはどうすればよいですか。 Safariで開く場合、リンクは次と同じです。

http://www.facebook.com/AlibabaUS

ありがとうございました。

62
vietstone

以下に、Facebookアプリが使用するスキームをいくつか示します。ソースリンクにはさらに多くのスキームがあります。

NSURL *url = [NSURL URLWithString:@"fb://profile/<id>"];
[[UIApplication sharedApplication] openURL:url];

スキーム

fb:// profile –ユーザーのプロファイルでFacebookアプリを開きます

fb:// friends – Facebookアプリをフレンドリストに開きます

fb:// notifications – Facebookアプリを通知リストに開きます(注:このURLにバグがあるようです。通知ページが開きます。ただし、他の場所に移動することはできません。 Facebookアプリで)

fb:// feed – Facebookアプリをニュースフィードに開きます

fb:// events –イベントページにFacebookアプリを開きます

fb:// requests – Facebookアプリをリクエストリストに開きます

fb:// notes – Facebookアプリをメモページに開きます

fb:// albums – Facebookアプリを開いてフォトアルバムリストに追加

このURLを開く前に、ユーザーがFacebookアプリを使用しているかどうかを確認する場合は、次のことを実行できます(以下の別の回答で説明します)。

if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
    [[UIApplication sharedApplication] openURL:nsurl];
}
else {
    //Open the url as usual
}

ソース

http://wiki.akosma.com/IPhone_URL_Schemes#Facebook

133
WrightsCS

https://graph.facebook.com/(your_username またはページ名)を使用してページIDを取得し、すべての拘留とIDを確認した後

IOSアプリの使用後:

 NSURL *url = [NSURL URLWithString:@"fb://profile/[your ID]"];
 [[UIApplication sharedApplication] openURL:url];
27
Romano401

Yonixのコメントを回答として追加するために、古いfb://page/… URLは機能しなくなりました。明らかに、ページはプロファイルではありませんが、fb://profile/…に置き換えられたようです。

26
zoul

MonoTouchで次の方法でこれを行いました。純粋なObj-Cベースのアプローチでもそれほど違いはないと確信しています。 URLを時々変更するクラス内でこれを使用したため、if/elseifステートメントに入れなかったのです。

NSString *myUrls = @"fb://profile/100000369031300|http://www.facebook.com/ytn3rd";
NSArray *urls = [myUrls componentsSeparatedByString:@"|"];
for (NSString *url in urls){
    NSURL *nsurl = [NSURL URLWithString:url];
    if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
        [[UIApplication sharedApplication] openURL:nsurl];
        break;
    }
}

アプリがSafari/Facebookに変更される前にブレークが呼び出されるとは限りません。あなたのプログラムはそこで停止し、戻ってきたときに呼び出すと思います。

10
Brad Moore

私は質問が古いことを知っていますが、上記の答えをサポートするために、作業コードを共有したいと思いました。これらの2つのメソッドを任意のクラスに追加するだけで、コードはfacebookアプリがインストールされているかどうかを確認し、インストールされていない場合はURLをブラウザーで開きます。 url(example、 http://www.facebook.com/AlibabaUS )をopenUrl:に渡すだけで、すべての魔法が実行されます。それが誰かを助けることを願っています!.

注:UrlUtilsは私にコードを提供していたクラスでした。ニーズに合わせて別のコードに変更する必要があるかもしれません。

+(void) openUrlInBrowser:(NSString *) url
{
    if (url.length > 0) {
        NSURL *linkUrl = [NSURL URLWithString:url];
        [[UIApplication sharedApplication] openURL:linkUrl];
    }
}
+(void) openUrl:(NSString *) urlString
{

    //check if facebook app exists
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {

        // Facebook app installed
        NSArray *tokens = [urlString componentsSeparatedByString:@"/"];
        NSString *profileName = [tokens lastObject];

        //call graph api
        NSURL *apiUrl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@",profileName]];
        NSData *apiResponse = [NSData dataWithContentsOfURL:apiUrl];

        NSError *error = nil;
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:apiResponse options:NSJSONReadingMutableContainers error:&error];

        //check for parse error
        if (error == nil) {

            NSString *profileId = [jsonDict objectForKey:@"id"];

            if (profileId.length > 0) {//make sure id key is actually available
                NSURL *fbUrl = [NSURL URLWithString:[NSString stringWithFormat:@"fb://profile/%@",profileId]];
                [[UIApplication sharedApplication] openURL:fbUrl];
            }
            else{
                [UrlUtils openUrlInBrowser:urlString];
            }

        }
        else{//parse error occured
            [UrlUtils openUrlInBrowser:urlString];
        }

    }
    else{//facebook app not installed
        [UrlUtils openUrlInBrowser:urlString];
    }

}
8
HussoM

Swift

if let url = URL(string: "fb://profile/<id>") {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:],completionHandler: { (success) in
                print("Open fb://profile/<id>: \(success)")
            })
        } else {
            let success = UIApplication.shared.openURL(url)
            print("Open fb://profile/<id>: \(success)")
        }
 }
4
iParesh

Facebookアプリケーションがログインしている場合、次のコードを実行するとページが開きます。コードの実行時にFacebookアプリケーションがログインしていない場合、ユーザーはFacebookアプリにリダイレクトされてログインし、接続後、Facebookはページにリダイレクトされません!

NSURL *fbNativeAppURL = [NSURL URLWithString:@"fb://page/yourPageIDHere"] [[UIApplication sharedApplication] openURL:fbNativeAppURL]
1
user3012572

今日これを確認しましたが、Facebook pageを開こうとしている場合は、 "fb:// page/{Page ID}"

ページIDは、ページの下部にある[概要]セクションにあります。

私のユースケースに固有のXamarin.Formsでは、このスニペットを使用して、利用可能な場合はアプリで、それ以外の場合はブラウザーで開くことができます。

Device.OpenUri(new Uri("fb://page/{id}"));

1
Dan

これにより、SafariでURLが開きます。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.facebook.com/comments.php?href=http://wombeta.jiffysoftware.com/ViewWOMPrint.aspx?WPID=317"]];

IPhoneの場合、fb://で始まるURLを使用してインストールすると、Facebookアプリを起動できます

詳細についてはこちらをご覧ください: http://iphonedevtools.com/?p=302 こちらもご覧ください: http://wiki.akosma.com/IPhone_URL_Schemes#Facebook

上記のサイトから盗まれた:

fb://profile – Open Facebook app to the user’s profile
fb://friends – Open Facebook app to the friends list
fb://notifications – Open Facebook app to the notifications list (NOTE: there appears to be a bug with this URL. The Notifications page opens. However, it’s not possible to navigate to anywhere else in the Facebook app)
fb://feed – Open Facebook app to the News Feed
fb://events – Open Facebook app to the Events page
fb://requests – Open Facebook app to the Requests list
fb://notes - Open Facebook app to the Notes page
fb://albums – Open Facebook app to Photo Albums list

上記のURLを起動するには:

NSURL *theURL = [NSURL URLWithString:@"fb://<insert function here>"];
[[UIApplication sharedApplication] openURL:theURL];
0
Saad