Ответ 1
В Facebook версии 11.0.0.11.23 (3002850) fb://profile/и fb://page/больше не поддерживаются. Я декомпилировал приложение Facebook и смог придумать следующее решение:
String facebookUrl = "https://www.facebook.com/JRummyApps";
try {
int versionCode = getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
if (versionCode >= 3002850) {
Uri uri = Uri.parse("fb://facewebmodal/f?href=" + facebookUrl);
startActivity(new Intent(Intent.ACTION_VIEW, uri));;
} else {
// open the Facebook app using the old method (fb://profile/id or fb://page/id)
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/336227679757310")));
}
} catch (PackageManager.NameNotFoundException e) {
// Facebook is not installed. Open the browser
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl)));
}
Изменить: Прошло некоторое время, и похоже, что fb://профиль и fb://больше не поддерживаются. Ниже приведен метод, который я использовал в производстве:
/**
* Intent to open the official Facebook app. If the Facebook app is not installed then the
* default web browser will be used.</p>
*
* Example usage:</p>
* <code>newFacebookIntent(context.getPackageManager(), "https://www.facebook.com/JRummyApps");</code></p>
*
* @param pm
* Instance of the {@link PackageManager}.
* @param url
* The full URL to the Facebook page or profile.
* @return An intent that will open the Facebook page/profile.
*/
public static Intent newFacebookIntent(PackageManager pm, String url) {
Uri uri;
try {
pm.getPackageInfo("com.facebook.katana", 0);
// http://stackoverflow.com/a/24547437/1048340
uri = Uri.parse("fb://facewebmodal/f?href=" + url);
} catch (PackageManager.NameNotFoundException e) {
uri = Uri.parse(url);
}
return new Intent(Intent.ACTION_VIEW, uri);
}