新的Facebook API 3.0.和ActionBarSherlock兼容性

Bal*_*yto 15 android facebook facebook-android-sdk actionbarsherlock

我正在阅读facebook Android API 3.0文档,我不明白会话与后台活动有什么关系.在所有的例子中,我都应该扩展"FacebookFragment".好吧,如果我的整个应用程序没有扩展"SherlockFragment",那将是很好的,所以我不认为扩展FacebookFragment是一个选项.

如果我使用SessionLoginExample中的代码,并将我的AppID放在Strings中与facebook完全相同的字符串中,我得到:

错误

10-22 17:04:26.464: E/AndroidRuntime(5491): FATAL EXCEPTION: main
10-22 17:04:26.464: E/AndroidRuntime(5491): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.specsavers.moodspecs/nl.specsavers.moodspecs.LauncherActivity}: java.lang.NullPointerException: Argument applicationId cannot be null
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置初始检查是否安装了应用程序,以及会话是否存在.

 Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }

    } 
Run Code Online (Sandbox Code Playgroud)

我需要能够以某种方式将我的App ID放在某个实际上可以正常的地方,但我找不到放在哪里.

我需要知道如果我使用SherlockFragment可以避免扩展FacebookFragment.

TNX.

rig*_*ren 54

FacebookFragment不公开,不适合应用程序使用.

样品也大多使用FacebookActivity不过,是的-你不会需要延长FacebookActivity.正如您所提到的,SessionLoginSample演示了这一点,如果您不使用FacebookActivity,您应该处理会话序列化并覆盖/转发onActivityResult,如图所示.

也就是说,听起来你遇到的主要问题是设置applicationId.您可以在代码或元数据中设置applicationId.

在代码中:

要在代码中设置它,请定义包含您的应用程序ID的字符串常量MY_APP_ID并替换该行:

session = new Session(this);
Run Code Online (Sandbox Code Playgroud)

有:

session = new Session.Builder(this).setApplicationId(MY_APP_ID).build();
Run Code Online (Sandbox Code Playgroud)

在元数据中:

要在元数据中设置它,请将以下内容添加到应用程序标记内的AndroidManifest.xml中,但不在任何活动标记之外:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
Run Code Online (Sandbox Code Playgroud)

然后,在values/strings.xml中,为具有您的应用ID的app_id添加一个值:

<string name="app_id">1234567890</string>
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我必须使用元数据,因为我在我的启动器活动中使用会话信息.所以问题是<meta-data>在<application>标签之外.Tnx对于这个解释,它帮助了解了如何设置Session.现在我必须弄清楚如何在安装时避免使用FB App :) (4认同)

Min*_* Li 16

您不需要继承任何内容,如果您不通过代码提供app_id,则必须在应用程序元数据中(以及在strings.xml中)指定它.请参阅https://developers.facebook.com/docs/reference/android/3.0/Session#APPLICATION_ID_PROPERTY

在AndroidManifest.xml中,您需要添加:

<application android:label="@string/app_name" ...>
  ... other activity stuff here ...
  <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
</application>
Run Code Online (Sandbox Code Playgroud)

然后在string.xml中将app_id添加为字符串.