Abrir página do Facebook no aplicativo Android?

157

do meu aplicativo Android, eu gostaria de abrir um link para um perfil do Facebook no aplicativo oficial do Facebook (se o aplicativo estiver instalado, é claro). Para o iPhone, existe o fb://esquema de URL, mas tentar a mesma coisa no meu dispositivo Android gera um ActivityNotFoundException.

Existe a chance de abrir um perfil do Facebook no aplicativo oficial do Facebook a partir do código?

Björn Marschollek
fonte
2
Há um tópico que não tem resposta nos fóruns de desenvolvedores do facebook: forum.developers.facebook.net/viewtopic.php?pid=255227 (adicionando-o aqui porque mostra que não há uma resposta óbvia e talvez receba respondeu lá algum dia ...)
James Moore
você pode ver minha resposta daqui .
Mohammad Sommakia

Respostas:

152

Na versão do Facebook 11.0.0.11.23 (3002850) fb://profile/e fb://page/não funciona mais. Descompilei o aplicativo do Facebook e descobri que você pode usá-lo fb://facewebmodal/f?href=[YOUR_FACEBOOK_PAGE]. Aqui está o método que eu tenho usado na produção:

/**
 * <p>Intent to open the official Facebook app. If the Facebook app is not installed then the
 * default web browser will be used.</p>
 *
 * <p>Example usage:</p>
 *
 * {@code newFacebookIntent(ctx.getPackageManager(), "https://www.facebook.com/JRummyApps");}
 *
 * @param pm
 *     The {@link PackageManager}. You can find this class through {@link
 *     Context#getPackageManager()}.
 * @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 = Uri.parse(url);
  try {
    ApplicationInfo applicationInfo = pm.getApplicationInfo("com.facebook.katana", 0);
    if (applicationInfo.enabled) {
      // http://stackoverflow.com/a/24547437/1048340
      uri = Uri.parse("fb://facewebmodal/f?href=" + url);
    }
  } catch (PackageManager.NameNotFoundException ignored) {
  }
  return new Intent(Intent.ACTION_VIEW, uri);
}
Jared Rummler
fonte
4
@DjHacktorReborn, você não deve mais usar os IDs. Basta usar o link normal.
Jared Rummler
2
@DjHacktorReborn Acabei de verificar, trabalhando aqui. No Facebook versão 13.0.0.13.14
Jared Rummler
1
@AbdulWasae Ele já trabalhou em aplicativos com milhões de downloads. Se você tiver uma solução melhor, poste-a em vez de reduzir a votação de uma solução em funcionamento.
precisa saber é o seguinte
4
alguém pode confirmar que isso ainda funciona? (a partir de junho de 2019). Ainda receboActivityNotFoundException
nVxx 6/06/19
5
Isso abre a página do facebook, mas, diferentemente das páginas fb normais, não vemos o botão Curtir, o perfil e as fotos da capa, etc. Ele abre diretamente as informações de contato e exibe todas as postagens da página.
Neeraj Dwivedi
235

Isso funciona na versão mais recente:

  1. Vá para https://graph.facebook.com/ < user_name_here > ( https://graph.facebook.com/fsintents, por exemplo)
  2. Copie seu ID
  3. Use este método:

    public static Intent getOpenFacebookIntent(Context context) {
    
       try {
        context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
        return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/<id_here>"));
       } catch (Exception e) {
        return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/<user_name_here>"));
       }
    }

Isso abrirá o aplicativo do Facebook se o usuário o tiver instalado. Caso contrário, ele abrirá o Facebook no navegador.

EDIT: como a versão 11.0.0.11.23 (3002850) do aplicativo do Facebook não suporta mais esse caminho, existe outro caminho, verifique a resposta abaixo de Jared Rummler.

joaomgcd
fonte
1
Obrigado por isso, me ajudou muito! Agora, se houvesse uma maneira de fazê-lo no Twitter
Evan R.
3
Para obter uma lista dos esquemas de URL disponíveis no iOS, consulte wiki.akosma.com/IPhone_URL_Schemes - alguns deles também devem funcionar no Android
FrancescoR
7
e aqui está a resposta dessa questão; use "página" em vez de perfil - stackoverflow.com/a/15872383/1433187
Khobaib
1
Apenas observe que fb: // profile / NÃO é suportado no aplicativo do Facebook v1.3.2, que está incluído no estoque Nexus One 2.3.6
Marque
3
DjHacktorReborn é certo, nem fb: // perfil / <fpid> nem fb: // página / <fpid> estão mais funcionando começando fb v11
sam
38

Isso não é mais fácil? Por exemplo, dentro de um onClickListener?

try {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/426253597411506"));
    startActivity(intent);
} catch(Exception e) {
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.facebook.com/appetizerandroid")));
}

PS. Obtenha seu ID (o grande número) em http://graph.facebook.com/[userName]

John
fonte
Eu concordo, isso é melhor porque não faz nenhuma suposição sobre o nome do pacote de aplicativos do Facebook ou os filtros de intenção. No entanto, é pior pelo mesmo motivo, porque outros aplicativos também podem especificar filtros de intenção correspondentes. Depende do que você quer. Talvez adicione você intent.setPackageName ("com.facebook.katana") para garantir que nenhum outro aplicativo seja chamado.
Mark
Mas ele abre o navegador e são mostrados dados do Facebook, como é possível usar o Facebook App (para chamar o aplicativo Facebook)?
Mikheil Zhghenti
32

Para a página do Facebook:

try {
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/" + pageId));
} catch (Exception e) {
    intent =  new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + pageId));
}

Para o perfil do Facebook:

try {
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/" + profileId));
} catch (Exception e) {
    intent =  new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + profileId));
}

... porque nenhuma das respostas aponta a diferença

Ambos testados com o Facebook v.27.0.0.24.15 e Android 5.0.1 no Nexus 4

Murmel
fonte
oi, como saber a diferença entre perfil e página?
Alvarodoune 11/03/2015
1
O perfil é para uma pessoa particular, onde uma página é para empresas, lugares, marcas. Veja: facebook.com/help/217671661585622 [Título: Como são páginas diferentes de perfis pessoais?]
Murmel
para anotações: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("fb: // note /" + facebookNoteId));
voodoo98
1
Para encontrar o ID da página pública, evento, perfil, você pode usar o FindMyFbId
Carlos Zerga
O perfil não está sendo aberto no aplicativo do Facebook.
Hammad Nasir
27

Aqui está a maneira de fazer isso em 2016, funciona muito bem e é muito fácil.

Descobri isso depois de analisar como os emails enviados pelo facebook abriram o aplicativo.

// e.g. if your URL is https://www.facebook.com/EXAMPLE_PAGE, you should put EXAMPLE_PAGE at the end of this URL, after the ?
String YourPageURL = "https://www.facebook.com/n/?YOUR_PAGE_NAME";
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(YourPageURL));

startActivity(browserIntent);
Someguy123
fonte
1
Funciona perfeitamente, mesmo em 2016. Soluciona também um problema quando você navega no Facebook da Bélgica (quando os cookies são desativados quando não estão conectados).
Duvida #
3
Quando uso isso, o cabeçalho da página do Facebook que estou referenciando está ausente no aplicativo do Facebook, por exemplo, a imagem do perfil da página e as guias Página / Atividade / Insights.
Daniel Persson
Isso funciona se você tiver o nome da página (conforme indicado), mas não se tiver o ID numérico da página.
Eric B.
5
Ok, mas não me leva a uma página limpa, onde o usuário pode curtir minha página facilmente ... Ainda procurando por isso! Qualquer solução ?
Regis_AG
alguém tem que solução para @Regis_AG?
adrianvintu
22

este é o código mais simples para fazer isso

public final void launchFacebook() {
        final String urlFb = "fb://page/"+yourpageid;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(urlFb));

        // If a Facebook app is installed, use it. Otherwise, launch
        // a browser
        final PackageManager packageManager = getPackageManager();
        List<ResolveInfo> list =
            packageManager.queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
        if (list.size() == 0) {
            final String urlBrowser = "https://www.facebook.com/"+pageid;
            intent.setData(Uri.parse(urlBrowser));
        }

        startActivity(intent);
    }
MBH
fonte
isto não está a funcionar. quando estou definindo o link " facebook.com/pages/"+pageid "
BSKANIA
Omita as 'páginas /' - parte -> use "facebook.com/" + pageId
Murmel
ainda trabalhando como hoje! muito obrigado mudei esta parte "" facebook.com/pages/"+pageid ; " com este "" facebook.com/"+pageid ; "
naitbrahim
@naitbrahim Obrigado por nos informar que ainda está funcionando! Eu editei a resposta. aliás, a resposta foi publicada em 2013 :) Feliz por ter ajudado você
MBH
15

Uma abordagem mais reutilizável.

Essa é uma funcionalidade que geralmente usamos na maioria dos nossos aplicativos. Portanto, aqui está um pedaço de código reutilizável para conseguir isso.

(Semelhante a outras respostas em termos de fatos. Publique aqui apenas para simplificar e tornar a implementação reutilizável)

"fb://page/não funciona com versões mais recentes do aplicativo FB. Você deve usar fb://facewebmodal/f?href=para versões mais recentes. ( Como mencionado em outra resposta aqui )

Este é um código de trabalho completo atualmente disponível em um dos meus aplicativos:

public static String FACEBOOK_URL = "https://www.facebook.com/YourPageName";
public static String FACEBOOK_PAGE_ID = "YourPageName";

//method to get the right URL to use in the intent
public String getFacebookPageURL(Context context) {
        PackageManager packageManager = context.getPackageManager();
        try {
            int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
            if (versionCode >= 3002850) { //newer versions of fb app
                return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
            } else { //older versions of fb app
                return "fb://page/" + FACEBOOK_PAGE_ID;
            }
        } catch (PackageManager.NameNotFoundException e) {
            return FACEBOOK_URL; //normal web url
        }
    }

Este método retornará o URL correto para o aplicativo, se instalado, ou o URL da Web, se o aplicativo não estiver instalado.

Em seguida, inicie uma intenção da seguinte maneira:

Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
String facebookUrl = getFacebookPageURL(this);
facebookIntent.setData(Uri.parse(facebookUrl));
startActivity(facebookIntent);

É tudo o que você precisa.

AndroidMechanic - Viral Patel
fonte
Ele jogou "android.content.ActivityNotFoundException: Atividade não encontrada para lidar com Intenção {agir = android.intent.action.VIEW dat = fb: // página / ####}"
Rajbir Shienh
9

Isso foi submetido à engenharia reversa por Pierre87 no fórum FrAndroid , mas não consigo encontrar nenhum funcionário que o descreva; portanto, ele deve ser tratado como indocumentado e passível de parar de funcionar a qualquer momento:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProfileTabHostActivity");
intent.putExtra("extra_user_id", "123456789l");
this.startActivity(intent);
Jon Colverson
fonte
Sim, a solução parou de funcionar. O erro é: "java.lang.SecurityException ?: Negação de permissão: intenção inicial {flg = 0x10080000 cmp = com.facebook.katana / .ProfileTabHostActivity? (Possui extras)} do ProcessRecord?". A atividade ProfileTabHostActivity não possui um sinalizador android: exportado no AndroidManifest; portanto, por padrão android: exported = "false" para esta atividade. Como resultado, ProfileTabHostActivity não pode ser iniciado por outros aplicativos. A única esperança de que os desenvolvedores do FB resolvam esse problema nas versões de recursos do aplicativo FB.
dvpublic
Eu acho que a correção foi fechar esta "API acidental".
Vaiden
7

tente este código:

String facebookUrl = "https://www.facebook.com/<id_here>";
        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 {
                Uri uri = Uri.parse("fb://page/<id_here>");
                startActivity(new Intent(Intent.ACTION_VIEW, uri));
            }
        } catch (PackageManager.NameNotFoundException e) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl)));
        }
Ravi Makvana
fonte
7

Para fazer isso, precisamos do "ID da página do Facebook", você pode obtê-lo:

  • na página, vá para "Sobre".
  • vá para a seção "Mais informações".

introduza a descrição da imagem aqui

Para abrir o aplicativo do Facebook na página de perfil especificada,

você consegue fazer isso:

 String facebookId = "fb://page/<Facebook Page ID>";
  startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookId)));

Ou você pode validar quando o aplicativo do facebook não estiver instalado e abrir a página da web do facebook.

String facebookId = "fb://page/<Facebook Page ID>";
String urlPage = "http://www.facebook.com/mypage";

     try {
          startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(facebookId )));
        } catch (Exception e) {
         Log.e(TAG, "Application not intalled.");
         //Open url web page.
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
Jorgesys
fonte
Não vi isso Page IDna guia Sobre. É privado?
RoCk RoCk
5

Após muitos testes, encontrei uma das soluções mais eficazes:

private void openFacebookApp() {
    String facebookUrl = "www.facebook.com/XXXXXXXXXX";
    String facebookID = "XXXXXXXXX";

    try {
        int versionCode = getActivity().getApplicationContext().getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;

        if(!facebookID.isEmpty()) {
            // open the Facebook app using facebookID (fb://profile/facebookID or fb://page/facebookID)
            Uri uri = Uri.parse("fb://page/" + facebookID);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        } else if (versionCode >= 3002850 && !facebookUrl.isEmpty()) {
            // open Facebook app using facebook url
            Uri uri = Uri.parse("fb://facewebmodal/f?href=" + facebookUrl);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        } else {
            // Facebook is not installed. Open the browser
            Uri uri = Uri.parse(facebookUrl);
            startActivity(new Intent(Intent.ACTION_VIEW, uri));
        }
    } catch (PackageManager.NameNotFoundException e) {
        // Facebook is not installed. Open the browser
        Uri uri = Uri.parse(facebookUrl);
        startActivity(new Intent(Intent.ACTION_VIEW, uri));
    }
}
Javier Amor Penas
fonte
4

Minha resposta se baseia na resposta amplamente aceita de joaomgcd. Se o usuário tiver o Facebook instalado, mas desativado (por exemplo, usando a Quarentena de aplicativos), esse método não funcionará. A intenção do aplicativo do Twitter será selecionada, mas não será possível processá-lo porque está desativado.

Ao invés de:

context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));

Você pode usar o seguinte para decidir o que fazer:

PackageInfo info = context.getPackageManager().getPackageInfo("com.facebook.katana", 0);
if(info.applicationInfo.enabled)
    return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
else
    return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));
igordc
fonte
4

Melhor resposta que encontrei, está funcionando muito bem.

Basta ir à sua página no Facebook no navegador, clicar com o botão direito do mouse e clicar em "Visualizar código-fonte" e encontrar o page_idatributo: você deve usar page_idaqui nesta linha após a última barra invertida:

fb://page/pageID

Por exemplo:

Intent facebookAppIntent;
try {
    facebookAppIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/1883727135173361"));
    startActivity(facebookAppIntent);
} catch (ActivityNotFoundException e) {
    facebookAppIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://facebook.com/CryOut-RadioTv-1883727135173361"));
    startActivity(facebookAppIntent);
}
Shahid Ahmad
fonte
Isso só faz sentido para aplicativos estáticos.
Irshu
4

Em março de 2020, isso funcionaria perfeitamente.

private void openFacebookPage(String pageId) {
    String pageUrl = "https://www.facebook.com/" + pageId;

    try {
        ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo("com.facebook.katana", 0);

        if (applicationInfo.enabled) {
            int versionCode = getPackageManager().getPackageInfo("com.facebook.katana", 0).versionCode;
            String url;

            if (versionCode >= 3002850) {
                url = "fb://facewebmodal/f?href=" + pageUrl;
            } else {
                url = "fb://page/" + pageId;
            }

            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        } else {
            throw new Exception("Facebook is disabled");
        }
    } catch (Exception e) {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(pageUrl)));
    }
}
DeveScie
fonte
2
Intent intent = null;
    try {
        getPackageManager().getPackageInfo("com.facebook.katana", 0);
        String url = "https://www.facebook.com/"+idFacebook;
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://facewebmodal/f?href="+url));
    } catch (Exception e) {
        // no Facebook app, revert to browser
        String url = "https://facebook.com/"+idFacebook;
        intent = new Intent(Intent.ACTION_VIEW);
        intent .setData(Uri.parse(url));
    }
    this.startActivity(intent);
Desenvolvedor Tiger
fonte
2

A partir de julho de 2018, isso funcionaria perfeitamente com ou sem o aplicativo do Facebook em todos os dispositivos.

private void goToFacebook() {
    try {
        String facebookUrl = getFacebookPageURL();
        Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
        facebookIntent.setData(Uri.parse(facebookUrl));
        startActivity(facebookIntent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getFacebookPageURL() {
    String FACEBOOK_URL = "https://www.facebook.com/Yourpage-1548219792xxxxxx/";
    String facebookurl = null;

    try {
        PackageManager packageManager = getPackageManager();

        if (packageManager != null) {
            Intent activated = packageManager.getLaunchIntentForPackage("com.facebook.katana");

            if (activated != null) {
                int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

                if (versionCode >= 3002850) {
                    facebookurl = "fb://page/1548219792xxxxxx";
                }
            } else {
                facebookurl = FACEBOOK_URL;
            }
        } else {
            facebookurl = FACEBOOK_URL;
        }
    } catch (Exception e) {
        facebookurl = FACEBOOK_URL;
    }
    return facebookurl;
}
Immy
fonte
FB Lite aplicativo tem um nome de pacote separado, se você usar essa forma, então você também deve verificar com.facebook.lite - embora eu não tenha verificado se Lite irá lidar com estes URL
androidguy
@androidguy Eu não tenho o FB Lite. Seria bom saber se o código funciona com ele. Se você pudesse testá-lo de alguma forma e colocar suas descobertas aqui, isso ajudaria outras pessoas que ainda vêm aqui. Apreciado, obrigado
Immy 10/10
@Immy -> Yourpage-1548219792xxxxxx no URL é o ID da página ou o URL da página. Portanto, por exemplo: facebook.com/PageName é o URL da minha página e o ID é algo como 2345676. Portanto, o URL a ser mencionado no código será facebook.com/PageName ou algo mais?
Neeraj Dwivedi
@NeerajDwivedi Você precisa de: nome da página e ID da página no URL. Algo assim: 'String FACEBOOK_URL = " facebook.com/BeanRoaster-1548219792112345/" ;'
11189 Immy
@Immy, usei exatamente o mesmo código substituindo o FACEBOOK_URL para " facebook.com/myPageName-myPageID " e estou recebendo uma página em branco com a barra de pesquisa na parte superior. Estou usando o aplicativo mais recente do Facebook no Android 9 (versão do aplicativo Fb - 237.0.0.44.120)
Neeraj Dwivedi
1

Eu criei um método para abrir a página do facebook no aplicativo do facebook, se o aplicativo não existir, será aberto no chrome

    String socailLink="https://www.facebook.com/kfc";
    Intent intent = new Intent(Intent.ACTION_VIEW);
    String facebookUrl = Utils.getFacebookUrl(getActivity(), socailLink);
    if (facebookUrl == null || facebookUrl.length() == 0) {
        Log.d("facebook Url", " is coming as " + facebookUrl);
        return;
    }
    intent.setData(Uri.parse(facebookUrl));
    startActivity(intent);

Utils.class adiciona este método

public static String getFacebookUrl(FragmentActivity activity, String facebook_url) {
    if (activity == null || activity.isFinishing()) return null;

    PackageManager packageManager = activity.getPackageManager();
    try {
        int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
        if (versionCode >= 3002850) { //newer versions of fb app
            Log.d("facebook api", "new");
            return "fb://facewebmodal/f?href=" + facebook_url;
        } else { //older versions of fb app
            Log.d("facebook api", "old");
            return "fb://page/" + splitUrl(activity, facebook_url);
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.d("facebook api", "exception");
        return facebook_url; //normal web url
    }
}

e isto

 /***
 * this method used to get the facebook profile name only , this method split domain into two part index 0 contains https://www.facebook.com and index 1 contains after / part
 * @param context contain context
 * @param url contains facebook url like https://www.facebook.com/kfc
 * @return if it successfully split then return "kfc"
 *
 * if exception in splitting then return "https://www.facebook.com/kfc"
 *
 */
 public static String splitUrl(Context context, String url) {
    if (context == null) return null;
    Log.d("Split string: ", url + " ");
    try {
        String splittedUrl[] = url.split(".com/");
        Log.d("Split string: ", splittedUrl[1] + " ");
        return splittedUrl.length == 2 ? splittedUrl[1] : url;
    } catch (Exception ex) {
        return url;
    }
}
Abdul Rizwan
fonte
3
Na versão mais recente, isso está me levando para a página sobre enquanto eu estou olhando para navegar até a página inicial. Alguma dica?
Balaji Katika 02/02
Você encontrou a solução?
Aman Verma
1

Para iniciar a página do facebook a partir do seu aplicativo, deixe urlString = "fb: // page / your_fb_page_id"

Para iniciar o facebook messenger, deixe urlString = "fb-messenger: // usuário / your_fb_page_id"

O ID da página do FB geralmente é numérico. Para obtê-lo, vá para Find My FB ID e insira o URL do seu perfil, algo como www.facebook.com/edgedevstudio e clique em "Find ID Numérico".

Agora você tem seu ID numérico fb. substitua "your_fb_page_id" pelo ID numérico gerado

 val intent = Intent(Intent.ACTION_VIEW, Uri.parse(urlString))
 if (intent.resolveActivity(packageManager) != null) //check if app is available to handle the implicit intent
 startActivity(intent)
EdgeDev
fonte
1

Declarar constantes

  private String FACEBOOK_URL="https://www.facebook.com/approids";
    private String FACEBOOK_PAGE_ID="approids";

Método de declaração

public String getFacebookPageURL(Context context) {
        PackageManager packageManager = context.getPackageManager();
        try {
            int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

            boolean activated =  packageManager.getApplicationInfo("com.facebook.katana", 0).enabled;
            if(activated){
                if ((versionCode >= 3002850)) {
                    Log.d("main","fb first url");
                    return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
                } else {
                    return "fb://page/" + FACEBOOK_PAGE_ID;
                }
            }else{
                return FACEBOOK_URL;
            }
        } catch (PackageManager.NameNotFoundException e) {
            return FACEBOOK_URL;
        }
    }

Função de chamada

Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
                String facebookUrl = getFacebookPageURL(MainActivity.this);
                facebookIntent.setData(Uri.parse(facebookUrl));
                startActivity(facebookIntent);
Abhishek Agarwal
fonte
0

Respondendo a isso em outubro de 2018. O código de trabalho é aquele que usa o ID da página. Acabei de testar e é funcional.

public static void openUrl(Context ctx, String url){
    Uri uri = Uri.parse(url);
    if (url.contains(("facebook"))){
        try {
            ApplicationInfo applicationInfo = ctx.getPackageManager().getApplicationInfo("com.facebook.katana", 0);
            if (applicationInfo.enabled) {
                uri = Uri.parse("fb://page/<page_id>");
                openURI(ctx, uri);
                return;
            }
        } catch (PackageManager.NameNotFoundException ignored) {
            openURI(ctx, uri);
            return;
        }
    }
Franzesz
fonte
0

Eu implementei neste formulário no webview usando fragment-inside oncreate:

 webView.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView viewx, String urlx)
                {
     if(Uri.parse(urlx).getHost().endsWith("facebook.com")) {
                        {
                            goToFacebook();
                        }
                        return false;
                    }
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlx));
                    viewx.getContext().startActivity(intent);
                    return true;
                }

});

e fora onCreateView:

 private void goToFacebook() {
        try {
            String facebookUrl = getFacebookPageURL();
            Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
            facebookIntent.setData(Uri.parse(facebookUrl));
            startActivity(facebookIntent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //facebook url load
    private String getFacebookPageURL() {
        String FACEBOOK_URL = "https://www.facebook.com/pg/XXpagenameXX/";
        String facebookurl = null;

        try {
            PackageManager packageManager = getActivity().getPackageManager();

            if (packageManager != null) {
                Intent activated = packageManager.getLaunchIntentForPackage("com.facebook.katana");

                if (activated != null) {
                    int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;

                    if (versionCode >= 3002850) {
                        facebookurl = "fb://page/XXXXXXpage_id";
                    }
                } else {
                    facebookurl = FACEBOOK_URL;
                }
            } else {
                facebookurl = FACEBOOK_URL;
            }
        } catch (Exception e) {
            facebookurl = FACEBOOK_URL;
        }
        return facebookurl;
    }
silvertech048
fonte
0

fb aberto no evento de clique no botão sem usar o facebook sdk

 Intent FBIntent = new Intent(Intent.ACTION_SEND);
    FBIntent.setType("text/plain");
    FBIntent.setPackage("com.facebook.katana");
    FBIntent.putExtra(Intent.EXTRA_TEXT, "The text you wanted to share");
    try {
        context.startActivity(FBIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(context, "Facebook have not been installed.", Toast.LENGTH_SHORT).show( );
    }
Drashti Vyas
fonte
0
fun getOpenFacebookIntent(context: Context, url: String) {
    return try {
        context.packageManager.getPackageInfo("com.facebook.katana", 0)
        context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/$url/")))
    } catch (e: Exception) {
        context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
    }
}
Hardik Patel
fonte
0

1 - para obter seu ID, vá para o seu perfil de imagem e clique com o botão direito do mouse e pegue o endereço do link de cópia.

        try {
                Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("fb://profile/id"));
                startActivity(intent);
            } catch(Exception e) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("facebook url")));
            }
        }
    });
mohamed gemy
fonte
-1
try {
       String[] parts = url.split("//www.facebook.com/profile.php?id=");
       getPackageManager().getPackageInfo("com.facebook.katana", 0);
       startActivity(new Intent (Intent.ACTION_VIEW, Uri.parse(String.format("fb://page/%s", parts[1].trim()))));
    } catch (Exception e) {
       startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
    }
John
fonte
-2

Você pode abrir o aplicativo do facebook no botão e clicar da seguinte maneira: -

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            startNewActivity("com.facebook.katana");
        }
    });

}

public void startNewActivity( String packageName)
{
    Intent intent = MainActivity.this.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent != null)
    {
        // we found the activity
        // now start the activity
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        // bring user to the market
        // or let them choose an app?
        intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("market://details?id="+packageName));
        startActivity(intent);
    }
}
Deepak Sharma
fonte