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