Pan*_*ang 22 android facebook facebook-authentication facebook-android-sdk
我正在开发一个与Facebook集成的Android应用程序.我想要:
从技术上讲,这将是:
email许可publish_stream许可我打电话Session.openActiveSession()给Session.StatusCallback(我已经检查过事先没有活动的打开会话):
final Session.StatusCallback sessionStatusCallback = new Session.StatusCallback() {
public void call(final Session session, SessionState state, Exception exception) {
// If there is an exception...
if(exception != null)
{
// Handle fail case here.
return;
}
// If session is just opened...
if(state == SessionState.OPENED)
{
// Handle success case here.
return;
}
};
};
// Start Facebook Login.
Session.openActiveSession(activity, true, sessionStatusCallback);
Run Code Online (Sandbox Code Playgroud)
成功登录后调用我的回调.到现在为止还挺好.
email许可这是我的状态回调:
new Session.StatusCallback() {
public void call(final Session session, SessionState state, Exception exception) {
// If there is an exception...
if(exception != null)
{
// Handle fail case here.
return;
}
// If token is just updated...
if(state == SessionState.OPENED_TOKEN_UPDATED)
{
// Handle success case here.
return;
}
};
};
Run Code Online (Sandbox Code Playgroud)
我请求许可Session.requestNewReadPermissions():
final Session session = Session.getActiveSession();
final static String[] PERMISSION_ARRAY_READ = {"email"};
final List<String> permissionList = Arrays.asList(PERMISSION_ARRAY_READ);
// If all required permissions are available...
if(session.getPermissions().containsAll(permissionList))
{
// Handle success case here.
return;
}
// Request permissions.
session.requestNewReadPermissions(new Session.NewPermissionsRequest(activity, permissionList));
Run Code Online (Sandbox Code Playgroud)
授予权限后调用我的回调.到现在为止还挺好.
publish_stream许可这是我的状态回调:
new Session.StatusCallback() {
public void call(final Session session, SessionState state, Exception exception) {
// If there is an exception...
if(exception != null)
{
// Handle fail case here.
return;
}
// If token is just updated...
if(state == SessionState.OPENED_TOKEN_UPDATED)
{
// Handle success case here.
return;
}
};
};
Run Code Online (Sandbox Code Playgroud)
我请求许可Session.requestNewPublishPermissions():
final Session session = Session.getActiveSession();
final static String[] PERMISSION_ARRAY_PUBLISH = {"publish_stream"};
final List<String> permissionList = Arrays.asList(PERMISSION_ARRAY_PUBLISH);
// If all required permissions are available...
if(session.getPermissions().containsAll(permissionList))
{
// Handle success case here.
return;
}
// Request permissions.
session.requestNewPublishPermissions(new Session.NewPermissionsRequest(activity, permissionList));
Run Code Online (Sandbox Code Playgroud)
这次,在授予权限后不会调用我的回调.
经过进一步调查,我发现我的回调是由com.facebook.Session#postStateChange(SessionState, SessionState, Exception)以下因素触发的:
void postStateChange(final SessionState oldState, final SessionState newState, final Exception exception) {
if (oldState == newState && exception == null) {
return;
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
因为oldState并且newState是相等的(两者都是SessionState.OPENED_TOKEN_UPDATED,我的回调没有被调用.
如何在第二次授予许可后收到任何通知?我应该参加close()会话并从缓存中重新打开它吗?
我的Facebook Android SDK 3.0可以从这里下载,这在Facebook的Facebook SDK for Android入门中有所说明.
rig*_*ren 10
这是一个错误.
[编辑:正如Guy在评论中指出的那样,这已在3.0.1中修复,因此不再需要此解决方法]
您提到的解决方法基本上是正确的,但您不需要调用close.如果您正在使用单个活动会话,则在调用requestNewPublishPermissions()之前只需调用:
Session.openActiveSessionFromCache(myContext);
Run Code Online (Sandbox Code Playgroud)
如果您正在使用多个会话,则需要使用TokenCachingStrategy初始化一个新会话,验证它是否处于CREATED_TOKEN_LOADED状态,并调用openForRead(null);
执行其中之一后,requestNewPublishPermissions()应在完成后调用您的通知.
| 归档时间: |
|
| 查看次数: |
15713 次 |
| 最近记录: |