15

我正在阅读 facebook Android API 3.0 文档,但我不明白 session 与后台活动有什么关系。在所有示例中,我都应该扩展“FacebookFragment”。好吧,如果我的整个应用程序没有扩展“SherlockFragment”那就太好了,所以我不认为扩展 FacebookFragment 是一种选择。

如果我使用 SessionLoginExample 中的代码,并将我的 AppID 放在与 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

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

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

    } 

我需要能够以某种方式将我的 App ID 放在实际上可以的地方,但我找不到放置它的位置。

我需要知道在使用 SherlockFragment 时是否可以避免扩展 FacebookFragment。

肿瘤坏死因子。

4

2 回答 2

54

FacebookFragment 不是公开的,也不打算供应用程序使用。

不过,这些示例确实主要使用 FacebookActivity,而且是的——您不需要扩展 FacebookActivity。正如您所提到的,SessionLoginSample 演示了这一点,如果您不使用 FacebookActivity,您应该处理 Session 序列化并覆盖/转发 onActivityResult,如图所示。

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

在代码中:

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

session = new Session(this);

和:

session = new Session.Builder(this).setApplicationId(MY_APP_ID).build();

在元数据中:

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

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>

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

<string name="app_id">1234567890</string>
于 2012-10-22T19:51:24.743 回答
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>

然后将 app_id 作为字符串添加到您的 string.xml 中。

于 2012-10-22T16:46:11.910 回答