Development Tip

iOS 앱에서 Facebook 페이지 링크 열기

yourdevel 2020. 11. 9. 21:19
반응형

iOS 앱에서 Facebook 페이지 링크 열기


사용자를 내 앱의 Facebook 페이지로 리디렉션하고 싶어서 다음 코드가 있습니다.

[[UIApplication sharedApplication] openURL:
    [NSURL URLWithString: @"https://facebook.com/myAppsPage"]];

장치에 Facebook 앱이 없으면 잘 작동합니다. 그런 다음 링크가 Safari에서 열립니다.

기기에 Facebook 앱이 설치된 경우 위의 코드를 실행하면 Facebook 앱이 열리지 만 내 앱 페이지가 아닌 사용자 타임 라인이 표시됩니다. @"fb://pages/myAppsPage"및에 대한 링크를 변경하려고했지만 @"fb://profile/myAppsPage사용자 타임 라인이 다시 열렸습니다.

그래서 제 질문은, Facebook 앱이없는 경우 safari에서, 또는 설치된 경우 Facebook 앱에서 내 앱 페이지를 열 수있는 방법입니다.


가상 URL 대신 주어진 페이지에 대한 페이스 북 ID를 사용해야합니다. 페이지 ID를 얻으려면 다음 URL에 페이지의 가상 이름을 입력하고 "id"값을 복사하십시오.

https://graph.facebook.com/yourappspage

ID가 있으면 canOpenURL 메서드를 사용하여 FB가 설치되었는지 확인하고 두 상태에 대해 적절한 콘텐츠를 제공하는 메서드를 설정할 수 있습니다.

NSURL *facebookURL = [NSURL URLWithString:@"fb://profile/113810631976867"];
if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
    [[UIApplication sharedApplication] openURL:facebookURL];
} else {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]];
}

마지막 답변 이후 Facebook이 페이지 구성표를 변경 한 것 같습니다 (프로필은 이전과 동일합니다)

page_id이제 URL 쿼리의 일부입니다. 따라서 fb 앱으로 리디렉션하려면 URL이 다음 형식이어야합니다.

fb://page/?id=your_page_numeric_id

또한 fb앱에서 스키마 를 허용 해야합니다.Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>

추가 수정 사항이 있거나 페이스 북 페이지를 모르는 경우 페이스 북 웹 페이지 소스에서 page_id정확한 iOS fbURL을 추출 할 수 있습니다 .

  1. Safari에서 Facebook 페이지 열기
  2. 오른쪽 클릭-> 요소 검사
  3. 검색 al:ios:url

다음을 찾을 수 있어야합니다.

<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">

이 URL을 앱에 복사 한 다음 다음을 호출합니다.

guard let facebookURL = NSURL(string: "fb://page/?id=your_page_numeric_id") else {
    return
}

if (UIApplication.sharedApplication().canOpenURL(facebookURL)) {
    UIApplication.sharedApplication().openURL(facebookURL)
} else {

    guard let webpageURL = NSURL(string: "http://facebook.com/yourPage/") else {
        return
    }

    UIApplication.sharedApplication().openURL(webpageURL)
}

해야 할 일 ...


나는 skladek의 대답을 찾아서 기뻤습니다. 그래서 여기에 내 기여가 있습니다 : Swift + 다른 소셜 네트워크.

저는 트위터에 슬래시 3 개가 필요하고 Facebook과 Google+에 2 개만 필요하다는 것을 알게되었습니다. 그 이상은 조사하지 않았습니다.

// Go to https://graph.facebook.com/PageName to get your page id
func openFacebookPage() {
    let facebookURL = NSURL(string: "fb://profile/PageId")!
    if UIApplication.sharedApplication().canOpenURL(facebookURL) {
        UIApplication.sharedApplication().openURL(facebookURL)
    } else {
        UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!)
    }
}

func openTwitterProfile() {
    let twitterURL = NSURL(string: "twitter:///user?screen_name=USERNAME")!
    if UIApplication.sharedApplication().canOpenURL(twitterURL) {
        UIApplication.sharedApplication().openURL(twitterURL)
    } else {
        UIApplication.sharedApplication().openURL(NSURL(string: "https://twitter.com/USERNAME")!)
    }
}

func openGooglePlusPage() {
    let googlePlusURL = NSURL(string: "gplus://plus.google.com/u/0/PageId")!
    if UIApplication.sharedApplication().canOpenURL(googlePlusURL) {
        UIApplication.sharedApplication().openURL(googlePlusURL)
    } else {
        UIApplication.sharedApplication().openURL(NSURL(string: "https://plus.google.com/PageId")!)
    }
}

리팩토링 시도 :

struct SocialNetworkUrl {
    let scheme: String
    let page: String

    func openPage() {
        let schemeUrl = NSURL(string: scheme)!
        if UIApplication.sharedApplication().canOpenURL(schemeUrl) {
            UIApplication.sharedApplication().openURL(schemeUrl)
        } else {
            UIApplication.sharedApplication().openURL(NSURL(string: page)!)
        } 
    }
}

enum SocialNetwork {
    case Facebook, GooglePlus, Twitter, Instagram
    func url() -> SocialNetworkUrl {
        switch self {
        case .Facebook: return SocialNetworkUrl(scheme: "fb://profile/PageId", page: "https://www.facebook.com/PageName")
        case .Twitter: return SocialNetworkUrl(scheme: "twitter:///user?screen_name=USERNAME", page: "https://twitter.com/USERNAME")
        case .GooglePlus: return SocialNetworkUrl(scheme: "gplus://plus.google.com/u/0/PageId", page: "https://plus.google.com/PageId")
        case .Instagram: return SocialNetworkUrl(scheme: "instagram://user?username=USERNAME", page:"https://www.instagram.com/USERNAME")
        }
    }
    func openPage() {
        self.url().openPage()
    }
}

이제 다음을 호출 할 수 있습니다.

SocialNetwork.Twitter.openPage()

iOS 9의 경우 Info.plist의 LSApplicationQueriesSchemes 키를 사용하여 앱에서 호출 할 URL을 화이트리스트에 추가해야합니다.

여기에서 확인 하십시오 .

<key>LSApplicationQueriesSchemes</key>
    <array>
     <string>fb</string>
     <string>fbapi</string>
     <string>fbauth2</string>
     <string>fbshareextension</string>
     <string>fb-messenger-api</string>
     <string>twitter</string>
     <string>whatsapp</string>
     <string>wechat</string>
     <string>line</string>
     <string>instagram</string>
     <string>kakaotalk</string>
     <string>mqq</string>
     <string>vk</string>
     <string>comgooglemaps</string>
    </array>

많은 테스트 후 가장 효과적인 솔루션 중 하나를 찾았습니다.

NSString *facebookID = @"XXXXXXXXXX";
NSString *facebookURL = @"www.facebook.com/XXXXXXXX";
NSURL *urlModal = [NSURL URLWithString:[NSString stringWithFormat:@"fb://facewebmodal/f?href=%@", facebookURL]];
NSURL *urlWithID = [NSURL URLWithString:[NSString stringWithFormat:@"fb://page/%@", facebookID]]; // or "fb://profile/%@" or another type of ID
NSURL *url = [NSURL URLWithString:facebook_url];


if(facebookID && !facebookID.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlWithID]) {
    // open facebook app with facebookID
    [[UIApplication sharedApplication] openURL:urlWithID];
} else if (facebookURL && !facebookURL.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlModal]) {
    // open facebook app with facebookUrl
    [[UIApplication sharedApplication] openURL:urlModal];
} else if (![[UIApplication sharedApplication] openURL:url]) {
    // somehow open
    NSLog(@"%@%@",@"Failed to open url:",[url description]);
}

"다른 경우"문장의 순서는 취향에 따라 다릅니다.

그것을 즐기십시오 !! :-)


스위프트 2.3

코드의 경우 다음 예제를 사용할 수 있습니다.

참고 : 페이스 북 프로필 ID를 찾을 수없는 경우 팔로우 사이트를 사용하여 수행 할 수 있습니다 ( https://findmyfbid.com/ )

func goFacebook() {
    let profileID = "" //Here put profile id Example:'62260589592'
    let facebookURL = NSURL(string: "fb://profile/\(profileID)")!

    if UIApplication.sharedApplication().canOpenURL(facebookURL) {
        UIApplication.sharedApplication().openURL(facebookURL)
    } else {
        UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!)
    }
}

Info.plist의 경우 다음 매개 변수를 설정해야합니다.

Note: For open the Info.plist on Source Mode

-Go to Info.plist file and click right

-Select "Open As"

-Select "Source Code"

-Put code above of another

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>fb</string>
 <string>fbapi</string>
 <string>fbauth2</string>
 <string>fbshareextension</string>
 <string>fb-messenger-api</string>
</array>

참고URL : https://stackoverflow.com/questions/16589367/open-link-to-facebook-page-from-ios-app

반응형