我一直在通过Facebook最新的SDK即3.0进行一些登录项目.我在获取用户访问令牌方面遇到了困难.我在互联网上搜索了所有,最大的结果是使用了旧的SDK.以下是我从Facebook Android SDK教程中获取的一些代码:
public class LoginActivity extends Activity implements OnClickListener {
Button login;
TextView accessToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
login = (Button) findViewById(R.id.login);
accessToken = (TextView) findViewById(R.id.accessToken);
login.setOnClickListener(this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
@Override
public void onClick(View v) {
// start Facebook Login
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我试图通过将Facebook会话信息(令牌和到期日期)传递给我的服务器来进行身份验证(登录).
我对应用服务器的登录顺序如下:
在代码中:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
Run Code Online (Sandbox Code Playgroud)
我注意到,突然间,经过几个月的工作就好了,发送到服务器的信息有时无效,特别token是空字符串,这expires是一个无效的日期.
在通过Facebook SDK(版本3.0.1)后,我发现可能是我的错误的基础:
private static final Date MIN_DATE = new Date(Long.MIN_VALUE);
private static final Date ALREADY_EXPIRED_EXPIRATION_TIME = MIN_DATE;
private static final Date DEFAULT_LAST_REFRESH_TIME = new Date();
static AccessToken createEmptyToken(List<String> permissions) {
return new AccessToken("", ALREADY_EXPIRED_EXPIRATION_TIME, permissions, AccessTokenSource.NONE,
DEFAULT_LAST_REFRESH_TIME);
}
Run Code Online (Sandbox Code Playgroud)
这意味着在此过程中的某个地方,Facebook SDK正在创建一个空令牌并将其返回SessionState.Category.OPENED_CATEGORY.
为什么session.isOpened() …
我已经为Android应用添加了共享功能,如此处所述https://developers.facebook.com/docs/android/share-dialog/#setup
但我注意到,如果用户被取消,onComplete则无论如何都要调用共享活动
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
@Override
public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
Log.e("Activity", String.format("Error: %s", error.toString()));
}
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
Log.e("Activity", "Success!");
}
});
}
Run Code Online (Sandbox Code Playgroud)
我也查看了返回的Bundle.即使我取消分享对话,我也得到了
com.facebook.platform.extra.DID_COMPLETE=true
Run Code Online (Sandbox Code Playgroud)
如何获得用户真正在Facebook上共享数据的结果?(不用facebook按钮单独登录.也许需要添加一些权限?)
我开始使用facebook-android-sdk-3.5.2.
SDK项目还包含使用api的varius示例示例:
接下来我想尝试下一个示例:
我启动这个应用程序后,我收到此错误:( Logcat):
11-11 15:22:40.008: E/AndroidRuntime(14048): FATAL EXCEPTION: main
11-11 15:22:40.008: E/AndroidRuntime(14048): java.lang.RuntimeException: Unable to resume activity {com.facebook.samples.graphapi/com.facebook.samples.graphapi.GraphApiSampleActivity}: java.lang.IllegalArgumentException: Both context and applicationId must be non-null
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2621)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2649)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread.access$700(ActivityThread.java:134)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.os.Handler.dispatchMessage(Handler.java:99)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.os.Looper.loop(Looper.java:137)
11-11 15:22:40.008: E/AndroidRuntime(14048): at android.app.ActivityThread.main(ActivityThread.java:4867)
11-11 15:22:40.008: E/AndroidRuntime(14048): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 15:22:40.008: …Run Code Online (Sandbox Code Playgroud) 我无法使用Android Facebook SDK发出API请求,甚至无法从登录回调中获取用户 - 它始终返回null.
特别是,使用newMeRequest,我收到以下错误消息:
{ "error": {
"message": "API calls from the server require an appsecret_proof argument",
"type": "GraphMethodException",
"code": 100 } }
Run Code Online (Sandbox Code Playgroud)
实际上,它似乎很明显,因为在Facebook应用程序选项中将标志设置为true.但是,我知道移动sdks可以在没有秘密的情况下发出API请求.但是,如果我尝试使用currentSessionFacebook Graph API调试器中的访问令牌,则响应将与上面相同.
我不知道这是否与新的Android Facebook SDK有关,但我的代码与示例中的代码基本相同.登录很顺利,我得到会话令牌,但我不能发出任何API请求...
loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
graphUser = user;
}
});
Request.newMeRequest(currentSession, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
}
}
}).executeAsync();
Run Code Online (Sandbox Code Playgroud) 我的应用程序的最新版本偶尔会抛出此错误:
Caused by: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = com.facebook.friends.constants.FriendRequestMakeRef)
Run Code Online (Sandbox Code Playgroud)
这是堆栈下降到导致它的行:
at android.os.Parcel.readSerializable(Parcel.java:2148)
at android.os.Parcel.readValue(Parcel.java:2016)
at android.os.Parcel.readMapInternal(Parcel.java:2226)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getString(Bundle.java:1055)
at android.content.Intent.getStringExtra(Intent.java:4426)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,当我在Bundle上执行getStringExtra时,它会被抛出.看起来Facebook SDK正在向捆绑中添加一个对象,在阅读时,无法找到一个类然后崩溃.我在这条线上寻找的字符串与Facebook无关.
我很长一段时间没有改变任何与Facebook SDK相关的东西,但突然之间出现了这种情况.我把它归因于从旧的ANT样式编译到Gradle的切换,因为这是旧版本和这个新版本之间唯一的变化,导致错误.
无论如何,我四处搜索,发现没什么.更重要的是,我不会因为崩溃而责备它,我正在使用的Facebook SDK版本甚至没有包com.facebook.friends.constants
有没有人碰到这个?
我正在开发一个使用谷歌和Facebook集成的应用程序...我想修复那些按钮的高度和宽度...我想设置按钮文字手动...
我到目前为止尝试过
<com.facebook.login.widget.LoginButton
xmlns:fb="http://schemas.android.com/apk/res-auto"
android:id="@+id/connectWithFbButton"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="@string/fbloginText"
android:layout_marginTop="30dp"
/>
<com.google.android.gms.common.SignInButton
android:id="@+id/signin"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/googleloginText"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"/>
Run Code Online (Sandbox Code Playgroud)
虽然我已经注意到了这样的事情
fb:login_text="Login"
fb:logout_text="Logout"
or
facebook:login_text="Login"
Run Code Online (Sandbox Code Playgroud)
但我收到错误:: =>在'com.test.b2c'包中找不到属性'login_text'的资源标识符
或通过编码
loginButton = (LoginButton) findViewById(R.id.connectWithFbButton);
loginButton.setText("Login");
Run Code Online (Sandbox Code Playgroud)
现在我的布局看起来像这样

我也想设置这个按钮的高度和宽度.. ...帮助我的朋友..... thx提前
UPDATE
我在设置宽度方面没有直接问题我真正关心的是图片中显示的不一致的HEIGHT.我需要找到更好的方法来使这些按钮高度相同,并将Text设置为那些Button.

android facebook android-linearlayout google-plus android-facebook
我一直在使用4.27.0facebook sdk for android的版本.我一直在为Android 8+设备崩溃.堆栈跟踪如下:
Fatal Exception: java.lang.AssertionError: No NameTypeIndex match for SHORT_DAYLIGHT
at android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex(TimeZoneNamesImpl.java:724)
at android.icu.impl.TimeZoneNamesImpl$ZNames.getName(TimeZoneNamesImpl.java:790)
at android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName(TimeZoneNamesImpl.java:183)
at android.icu.text.TimeZoneNames.getDisplayName(TimeZoneNames.java:261)
at java.util.TimeZone.getDisplayName(TimeZone.java:405)
at java.util.TimeZone.getDisplayName(TimeZone.java:370)
at com.facebook.internal.Utility.refreshTimezone(Utility.java:1066)
at com.facebook.internal.Utility.refreshPeriodicExtendedDeviceInfo(Utility.java:1056)
at com.facebook.internal.Utility.setAppEventExtendedDeviceInfoParameters(Utility.java:707)
at com.facebook.internal.AppEventsLoggerUtility.getJSONObjectForGraphAPICall(AppEventsLoggerUtility.java:68)
at com.facebook.FacebookSdk.publishInstallAndWaitForResponse(FacebookSdk.java:568)
at com.facebook.FacebookSdk$4.run(FacebookSdk.java:547)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
我通过网络搜索过这个但是无法获得任何有用的信息.请在此提供一些指示.
当我在我的脸书上点击我的应用名称时.它重定向到" https://www.facebook.com/games/?app_id=827708240586758 "并显示"配置错误的应用程序抱歉,myapp尚未获准在App Center中显示." ..我认为facebook已经实现了一些新功能.请帮我摆脱这个问题.谢谢
我使用facebook-android-sdk:4.20.+和com.android.support它们与错误信息冲突的库:
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 25.2.0, 25.0.0. Examples include com.android.support:animated-vector-drawable:25.2.0 and com.android.support:customtabs:25.0.0 less... (?F1)
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion.)
Run Code Online (Sandbox Code Playgroud)
以下是我的依赖项. …
android facebook gradle android-facebook android-gradle-plugin