2016-01-02 1 views
21

Ich möchte meine Facebook Seite von meiner Android App aus öffnen, wenn die Facebook App verfügbar ist - wenn nicht: diese Seite sollte im Standardbrowser geöffnet sein.Facebook Seite öffnen (falls installiert) auf Android

dafür habe ich versucht, den folgenden Code:

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

Problem ist: ich mit der neuesten Version von Facebook hier ein Android-Gerät haben. Wenn ich von meiner App aus die Facebook-Seite öffnen möchte, öffnet sich die Facebook-App, aber ohne meine Seite.

Ich sehe nur die Meldung:

Probleme beim Laden Timeline.

Was ist los?

Antwort

74

"fb://page/ nicht mit neueren Versionen der FB App arbeiten. Sie sollten fb://facewebmodal/f?href= für neuere Versionen verwenden.

Dies ist ein vollwertiges Arbeitscode leben zur Zeit in einem meiner apps:

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 
     } 
    } 

Diese Methode wird die korrekte URL für App, wenn installiert oder Web-URL zurück, wenn app ist nicht installiert.

Dann eine Absicht beginnen wie folgt:

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

Das ist alles, was Sie brauchen.

+0

vielen Dank – SpecialFighter

+0

Quelle: http://StackOverflow.com/A/24547437/1048340 –

+0

Das funktioniert wie Charme – Adnan

6

Dies funktioniert auf die neueste Version:

Zum https://graph.facebook.com/ (https://graph.facebook.com/fsintents zum Beispiel).

Kopieren Sie Ihre Verwendung id diese Methode:

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>")); 
    } 
} 
+0

Dies ist die beste Antwort für meine Bedürfnisse. Die obige Antwort "fb: // facewebmodal/f? Href =" für neuere Versionen führt die Benutzer zu einer Seite von Posts durch die Entität, nicht wirklich ihre "Seite". Habe das nicht weiter erforscht. Außerdem ist es sehr wichtig, dass Sie die ID der Seite verwenden, NICHT den Namen der Vanity-Seite !! – ericWasTaken

+0

Zustimmen. Dies öffnet die aktuelle Seite, keine Suche nach der Seite. Für diejenigen, die Schwierigkeiten haben, die Seite ID, erhalten Sie es von hier: http://findmyfbid.com/ –

9

Okay, ich habe @AndroidMechanics Code geändert, weil auf den Geräten Facebook deaktiviert war, stürzt die App ab!

hier ist die modifed getFacebookUrl:

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)) { 
        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; 
     } 
    } 

Das einzige hinzugefügt, was zu suchen, wenn die App deaktiviert ist oder nicht, ob es der App, die Web-Browser ruft deaktiviert!

-5

Ich habe bereits beantwortet hier und es ist für mich zu arbeiten, lesen Sie bitte diesen Link https://stackoverflow.com/a/40133225/3636561

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); 

siehe Link Rest Teil zu bekommen.

5

Hier ist eine Lösung, die den Code von Jared Rummler und mischt.

Hinweis:fb://facewebmodal/f?href= Umleitungen an eine seltsame Facebook-Seite, die nicht die wie und andere wichtige Tasten hat, weshalb ich fb://page/ versuchen. Es funktioniert gut mit der aktuellen Facebook-Version (126.0.0.21.77, 1. Juni 2017). Der Haken könnte nutzlos sein, ich habe ihn für alle Fälle gelassen.

public static String getFacebookPageURL(Context context) 
{ 
    final String FACEBOOK_PAGE_ID = "123456789"; 
    final String FACEBOOK_URL = "MyFacebookPage"; 

    if(appInstalledOrNot(context, "com.facebook.katana")) 
    { 
     try 
     { 
      return "fb://page/" + FACEBOOK_PAGE_ID; 
      // previous version, maybe relevant for old android APIs ? 
      // return "fb://facewebmodal/f?href=" + FACEBOOK_URL; 
     } 
     catch(Exception e) {} 
    } 
    else 
    { 
     return FACEBOOK_URL; 
    } 

} 

Hier ist die appInstalledOrNot Funktion, die ich nahm (und modifiziert) aus Aerrow Antwort auf this post

private static boolean appInstalledOrNot(Context context, String uri) 
{ 
    PackageManager pm = context.getPackageManager(); 
    try 
    { 
     pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); 
     return true; 
    } 
    catch(PackageManager.NameNotFoundException e) 
    { 
    } 

    return false; 
} 

Wie die Facebook-ID einer Seite erhalten:

  1. Gehen Sie zu Ihrer Seite
  2. Klicken Sie mit der rechten Maustaste und View Page Source
  3. F ind in Seite: fb://page/?id=
  4. Hier gehen Sie!
+1

, die versuchen fangen in 'getFacebookPageURL' hat keine Funktion – SjoerdvGestel

+0

Sie haben Recht, ich habe es als Kommentar als Referenz bearbeitet. –