Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android facebook应用程序ID不能为空_Android_Facebook - Fatal编程技术网

Android facebook应用程序ID不能为空

Android facebook应用程序ID不能为空,android,facebook,Android,Facebook,我一直遵循以下教程将我的应用程序与Facebook集成。 我已经学习了教程中的所有内容,但是我发现有两种情况下applicationId不能为null,这真的很令人沮丧 我的FacebookActivityonCreate具有以下内容,与本教程完全相同: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); uiHelper = new UiLifecycl

我一直遵循以下教程将我的应用程序与Facebook集成。

我已经学习了教程中的所有内容,但是我发现有两种情况下applicationId不能为null,这真的很令人沮丧

我的
FacebookActivity
onCreate
具有以下内容,与本教程完全相同:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);
    setContentView(R.layout.main_fb);

    FragmentManager fm = getSupportFragmentManager();
    fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment);
    fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment);

    FragmentTransaction transaction = fm.beginTransaction();
    for(int i = 0; i < fragments.length; i++) 
    {
        transaction.hide(fragments[i]);
    }
    transaction.commit();
}
我尝试使用代码获取Id,但没有任何更改

到底是什么导致了这一切

TL;DR:you必须
strings.xml
中写入应用程序的ID,然后引用(即
@strings/fb_app_ID
),因为如果将它直接(作为值)放入
AndroidManifest.xml
中,它将无法工作

您必须在
AndroidManifest.xml
像这样:

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


下,问题是id正在转换为整数:

在我的例子中,
facebook\u app\u id
是从每个味道的
build.gradle
文件中设置的

解决方案是用
”包装id:

或者如果你想避免逃跑:

flavor.resValue "string", "facebook_app_id", '"1111111111111"'

实际上你不必在gradle中使用味道代码

如果数字长度超过4字节,则应将此代码保存在strings.xml中

<string name="app_id">1389xxxxxxxx</string>
注意:注意这个引号(

“1111111”

从今天起,答案并不完全正确。 如果有人没有使用此选项:
AppEventsLogger.activateApp(此)

自上次更新以来,您必须执行此操作,否则您的应用程序将崩溃。 你也应该在这里通过应用程序,而不是上下文


这次活动中的代码修改对我很有帮助

@Override
    protected void onCreate(Bundle savedInstanceState) {

        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(getApplication());

        super.onCreate(savedInstanceState);
        ...................
        ...................    
}

显然,您必须将它放在strings.xml中,因为如果您直接在AndroidManifest.xml中引用它,它将无法工作。这是一种奇怪的行为,因为这种方式适用于谷歌的API…@MikeDrakoulelis这是对的,因为如果您在AndroidManifest.xml中直接引用它,它将解析为
整数
。您可以将它放在AndroidManifest.xml中,并通过在字符串前面加前缀来避免转换为整数:
(注意转义字符和ID字符串之间的空格)如果由于字符串资源解析中的某些错误,Facebook sdk将applicationId报告为
null
,则可以在初始化sdk后手动设置applicationId。
FacebookSdk.sdkinInitialize(getApplicationContext());FacebookSdk.setApplicationId(getResources().getString(R.string.app_id));mFacebookCallbackManager=CallbackManager.Factory.create()
我听到了@MarkBeaton和Mike所说的。你能编辑答案来指出那个细节吗?这让我浪费了半个小时。总结:你不能将应用程序id粘贴到清单中,你必须使用字符串资源链接它,或者添加初始分隔符,如Mark saidflavor.resValue“string”、“facebook_app_id”、“1111”“这个解决方案对我很有效。真见鬼。这让我的应用程序崩溃了。是我还是Facebook在试图监视我们?首先他们禁用从graph api获取消息。然后他们禁用移动浏览器上的消息,除非你安装需要9271491724权限的messenger应用程序,现在他们强迫你登录你的应用程序。”应用程序与他们的事件记录器..我是偏执狂吗?他们是什么时候实现添加此:AppEventsLogger.activateApp(此);几天前?因为昨天我与that@IvanBinev在我回答之前30分钟:)超级有线,但它是工作,为什么FB做这个疯狂的狗屎,你需要接受的答案,这个答案和最后的FB sdk版本没有问题!
flavor.resValue "string", "facebook_app_id", '"1111111111111"'
<string name="facebook_app_id">"1111111111111"</string>
// Add this to the header of your file:
import com.facebook.FacebookSdk;

public class MyApplication extends Application {
    // Updated your class body:
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize the SDK before executing any other operations,
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
    }
}
@Override
    protected void onCreate(Bundle savedInstanceState) {

        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(getApplication());

        super.onCreate(savedInstanceState);
        ...................
        ...................    
}