【问题标题】:New Facebook API 3.0. and ActionBarSherlock compatibility新的 Facebook API 3.0。和 ActionBarSherlock 的兼容性
【发布时间】:2012-10-22 15:43:55
【问题描述】:

我正在阅读 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。

Tnx.

【问题讨论】:

    标签: android facebook actionbarsherlock facebook-android-sdk


    【解决方案1】:

    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>
    

    【讨论】:

    • 好的,我必须使用元数据,因为我在启动器活动中使用会话信息。所以问题是 标签之外。 Tnx 对于这个解释,它对理解如何设置 Session 有很大帮助。现在我必须弄清楚如何在安装时避免使用 FB App :)
    • 是否需要将 Session 信息保存到某些 Globals 中?我做什么,我在启动器活动期间检查是否安装了应用程序,以及是否创建了会话。然后,我有带有标签的应用程序。在第一个选项卡上,如果没有 FB 会话且没有 FB 应用程序,我将无法执行操作。在这种情况下,在选项卡 5(设置)上,您应该使用登录对话框登录,但前提是 FB App 不可用。然后我假设我应该使用给定的凭据创建新会话,然后将它们保存在某个地方。 (或不)
    • 必须使用资源@string/app_id 否则将不起作用。
    【解决方案2】:

    您不需要从任何东西继承,如果您不通过代码提供 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 中。

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多