即使尚未使用任何SDK,Android Facebook SDK也会在调用 FacebookSdk.sdkInitialize(context)
时向 graph.facebook.com
发出网络请求 .
因此,如果我们在 Application.onCreate()
中初始化它,将始终至少有一个网络请求 . 即使设置如下:
<meta-data
android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
android:value="false" />
我们仔细研究了这一点,因为用户抱怨他没有使用Facebook登录(这就是我们首先拥有Facebook SDK的原因)并且仍然有"user data"转移到Facebook . 在 GDPR 和可疑用户的时代,这是一种非常不利的行为!
我们现在正在做的是仅当用户想要使用Facebook登录时(在用户点击按钮时)才调用 FacebookSdk.sdkInitialize(context)
. 此外,我们从 AndroidManifest
删除了 meta-data
for android:name="com.facebook.sdk.ApplicationId"
. 这可以防止初始网络请求,但是 CurrentAccessTokenExpirationBroadcastReceiver
中出现以下崩溃:
java.lang.RuntimeException: Unable to start receiver com.facebook.CurrentAccessTokenExpirationBroadcastReceiver: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.
at com.facebook.internal.Validate.sdkInitialized(Validate.java:143)
at com.facebook.FacebookSdk.getApplicationContext(FacebookSdk.java:518)
at com.facebook.AccessTokenManager.getInstance(AccessTokenManager.java:86)
at com.facebook.CurrentAccessTokenExpirationBroadcastReceiver.onReceive(CurrentAccessTokenExpirationBroadcastReceiver.java:34)
现在有几个问题:
-
为什么Facebook一开始还在提出请求?如果他们想要验证身份验证令牌,他们可以在真正使用SDK时立即执行此操作...
-
如果没有调用
sdkInitialize()
,Facebook是否知道并容忍崩溃?因为我担心当这个_698116被删除时会有其他崩溃...... -
Most important: 在没有使用其功能时,还有其他方法可以阻止来自Facebook SDK的网络请求吗?
2 回答
我注意到Facebook SDK(至少在4.33版本中)在应用程序的清单中添加了一个提供程序(
com.facebook.internal.FacebookInitProvider
),它会自动使用应用程序上下文调用FacebookSdk.sdkInitialize
.即使您添加了:
在您的清单中,至少会有2个请求到Facebook:
获取应用设置的图形请求
一个事件请求“
fb_sdk_initialize
”,它记录了应用程序中包含的所有Facebook框架因此,为了防止这些请求(只要用户不允许它们我们不想要它们(GDPR)),我认为你做了我们需要做的一切:
不要在清单中添加
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
在清单中添加
<meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/>
仅在需要时初始化Facebook SDK .
像这样举例如:
但是关于你的崩溃,我不知道它为什么会发生,因为看起来广播“
com.facebook.sdk.ACTION_CURRENT_ACCESS_TOKEN_CHANGED
”是在本地发送的 .不过,我认为您可以通过将其添加到清单中来阻止它:
但是,使用Facebook SDK可能会产生不良后果,我认为您必须提供(并在您的清单中注册)您自己的BroadcastReceiver:
根据Facebook Support,
如果您想暂时禁用自动事件收集,例如在收集数据之前获得最终用户同意,则可以在应用程序标记的应用程序的AndroidManifest.xml中将AutoLogAppEventsEnabled的值设置为false .
例如:
要重新启用收集,例如在最终用户提供同意后,请调用FacebookSDK类的
setAutoLogAppEventsEnabled()
方法 .例如:
setAutoLogAppEventsEnabled(true);
如果您因任何原因需要再次暂停收集,可以调用
setAutoLogAppEventsEnabled(false);
并暂停收集直到重新启用它 .