我想将用户重定向到我的App的Facebook页面,所以我有以下代码:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
Run Code Online (Sandbox Code Playgroud)
如果设备上没有Facebook应用程序,这非常有用.然后在Safari中打开链接.
如果在设备上安装了Facebook应用程序,那么在执行上面的代码后Facebook应用程序打开,但它显示的是用户时间线,而不是我的应用页面.我试图更改链接到@"fb://pages/myAppsPage"和@"fb://profile/myAppsPage,但这再次打开用户时间轴.
所以,我的问题是:如果没有Facebook应用程序,我如何在safari中打开我的应用程序页面,如果安装了这个应用程序,我怎么能在Facebook应用程序中打开我的应用页面.
Sea*_*dek 123
您必须使用给定页面的Facebook ID而不是虚荣URL.要获取页面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"]];
}
Run Code Online (Sandbox Code Playgroud)
amb*_*ght 32
似乎自从Facebook的最后一个答案改变了页面方案(配置文件与之前相同)
在page_id现在是URL查询的一部分.因此,为了重定向到fb app,网址必须采用以下格式:
fb://page/?id=your_page_numeric_id
Run Code Online (Sandbox Code Playgroud)
还要确保fb应用中的白名单方案Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
Run Code Online (Sandbox Code Playgroud)
如果有任何进一步的修改或您不知道您的Facebook页面page_id,您可以fb从您的Facebook网页源提取精确的iOS URL.
al:ios:url你应该能够找到:
<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">
Run Code Online (Sandbox Code Playgroud)
将此网址复制到您的应用中,然后致电:
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)
}
Run Code Online (Sandbox Code Playgroud)
应该做的工作.
Nyc*_*cen 30
我很高兴找到skladek的答案,所以这是我的贡献:Swift +其他社交网络.
我发现我需要3个正斜杠用于推特,只有2个用于Facebook和Google+,我没有调查超过那个......
// 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")!)
}
}
Run Code Online (Sandbox Code Playgroud)
尝试重构:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以打电话:
SocialNetwork.Twitter.openPage()
Run Code Online (Sandbox Code Playgroud)
小智 11
对于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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45542 次 |
| 最近记录: |