Android上的Facebook Session.requestNewPermissions问题
我在从我的应用程序发布到Facebook的墙上时遇到了一些困难。 这通常发生在通过身份验证对话框(webview)登录Facebook时,而不是通过Facebook的应用程序Android上的Facebook Session.requestNewPermissions问题,android,facebook,webview,permissions,Android,Facebook,Webview,Permissions,我在从我的应用程序发布到Facebook的墙上时遇到了一些困难。 这通常发生在通过身份验证对话框(webview)登录Facebook时,而不是通过Facebook的应用程序 03-17 12:18:15.215: W/System.err(23203): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a
03-17 12:18:15.215: W/System.err(23203): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
03-17 12:18:15.230: W/System.err(23203): at com.facebook.Session.requestNewPermissions(Session.java:1006)
03-17 12:18:15.230: W/System.err(23203): at com.facebook.Session.requestNewPublishPermissions(Session.java:512)
03-17 12:18:15.235: W/System.err(23203): at com.mypackage.com.SocialAccess.postOnMyWall(SocialAccess.java:655)
03-17 12:18:15.235: W/System.err(23203): at com.mypackage.com.SocialAccess.facebookPost(SocialAccess.java:529)
03-17 12:18:15.235: W/System.err(23203): at com.mypackage.com.MainActivity.SocialHandler(MainActivity.java:4015)
03-17 12:18:15.235: W/System.err(23203): at icom.mypackage.com.MainActivity.onClick(MainActivity.java:1837)
03-17 12:18:15.235: W/System.err(23203): at android.view.View.performClick(View.java:4475)
03-17 12:18:15.235: W/System.err(23203): at android.view.View$PerformClick.run(View.java:18786)
03-17 12:18:15.235: W/System.err(23203): at android.os.Handler.handleCallback(Handler.java:730)
03-17 12:18:15.235: W/System.err(23203): at android.os.Handler.dispatchMessage(Handler.java:92)
03-17 12:18:15.235: W/System.err(23203): at android.os.Looper.loop(Looper.java:176)
03-17 12:18:15.235: W/System.err(23203): at android.app.ActivityThread.main(ActivityThread.java:5419)
03-17 12:18:15.235: W/System.err(23203): at java.lang.reflect.Method.invokeNative(Native Method)
03-17 12:18:15.235: W/System.err(23203): at java.lang.reflect.Method.invoke(Method.java:525)
03-17 12:18:15.235: W/System.err(23203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
03-17 12:18:15.235: W/System.err(23203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
03-17 12:18:15.235: W/System.err(23203): at dalvik.system.NativeStart.main(Native Method)
我的代码是:
public void postOnMyWall(String streamingLink, String webtv, String customText, Context mycontext) {
context = mycontext;
pref = context.getSharedPreferences("AppPref", Context.MODE_PRIVATE);
String fbtoken = pref.getString("fbtoken", null);
if(fbtoken.equals("") || fbtoken == null) {
fbloginrequested = true;
Log.d("SOCIAL", "fbloginrequested is true during postonymywall");
}
if(fbtoken != null) {
if(!fbtoken.equals("")) {
Session session = Session.getActiveSession();
if (session != null){
Log.d("SOCIAL", "in posting wall, session is not null");
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
try {
session.requestNewPublishPermissions(newPermissionsRequest);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("FACEBOOK", "error in requesting new permissions");
e.printStackTrace();
}
return;
}
String fb_message = "";
if(customText.equals(""))
fb_message = mycontext.getResources().getString(R.string.twitter_sharing) + " " + webtv + " " + mycontext.getResources().getString(R.string.twitter_sharing_ending);
else
fb_message = customText;
Log.d("SOCIAL", streamingLink);
Bundle postParams = new Bundle();
postParams.putString("name", "Test");
postParams.putString("caption", "Test");
postParams.putString("description", "Test");
postParams.putString("link", streamingLink);
postParams.putString("message", fb_message);
postParams.putString("picture", "https://mylink.tv/images/logo.jpg");
Request.Callback callback= new Request.Callback() {
public void onCompleted(Response response) {
Log.d("SOCIAL", "response " +response.toString());
// crash check
int response_code = 0;
try {
response_code = response.getConnection().getResponseCode();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Log.d("SOCIAL", "Facebook response code was " + response_code);
//
try {
JSONObject graphResponse = response
.getGraphObject().getInnerJSONObject();
String postId = null;
postId = graphResponse.getString("id");
} catch (Exception e) {
Log.d("SOCIAL", "JSON error "+ e.getMessage());
}
FacebookRequestError error = response.getError();
if (error != null) {
Toast.makeText(context, "ERROR: " + error.getErrorMessage(),
Toast.LENGTH_SHORT).show();
Toast.makeText(context, "Errore durante la condivisione su Facebook", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Live streaming condiviso su Facebook", Toast.LENGTH_SHORT).show();
}
}
};
//
Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);
final RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
Log.d("SOCIAL", "Message posted to your facebook wall!..");
}
//exp
else {
Log.d("SOCIAL", "in posting wall, session is null");
}
}
else
{
Log.d("SOCIAL","not logged in fb");
fbloginrequested = true;
}
}
else
{
Log.d("SOCIAL","not logged in fb");
fbloginrequested = true;
}
}
public void postOnMyWall(字符串streamingLink、字符串webtv、字符串customText、Context mycontext){
上下文=mycontext;
pref=context.getSharedReferences(“AppPref”,context.MODE\u PRIVATE);
字符串fbtoken=pref.getString(“fbtoken”,null);
if(fbtoken.equals(“”| | fbtoken==null){
fbloginrequested=真;
Log.d(“社交”,“在postonymywall期间,fbloginrequested是真实的”);
}
如果(fbtoken!=null){
如果(!fbtoken.equals(“”){
Session=Session.getActiveSession();
if(会话!=null){
Log.d(“社交”,“在张贴墙中,会话不为空”);
//检查发布权限
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
试一试{
session.requestNewPublishPermissions(newPermissionsRequest);
}捕获(例外e){
//TODO自动生成的捕捉块
Log.d(“FACEBOOK”,“请求新权限时出错”);
e、 printStackTrace();
}
返回;
}
字符串fb_message=“”;
if(customText.equals(“”)
fb_message=mycontext.getResources().getString(R.string.twitter_sharing)+“”+webtv+“”+mycontext.getResources().getString(R.string.twitter_sharing_ending);
其他的
fb_消息=自定义文本;
Log.d(“社会”,streamingLink);
Bundle postParams=新Bundle();
postParams.putString(“名称”、“测试”);
postParams.putString(“标题”、“测试”);
postParams.putString(“描述”、“测试”);
postParams.putString(“link”,streamingLink);
postParams.putString(“消息”,fb_消息);
postParams.putString(“图片”https://mylink.tv/images/logo.jpg");
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
Log.d(“社交”、“响应”+response.toString());
//碰撞检查
int响应_代码=0;
试一试{
response_code=response.getConnection().getResponseCode();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
Log.d(“社交”,“Facebook响应代码为”+响应代码);
//
试一试{
JSONObject graphResponse=响应
.getGraphObject().getInnerJSONObject();
字符串postId=null;
postId=graphResponse.getString(“id”);
}捕获(例外e){
Log.d(“社交”、“JSON错误”+e.getMessage());
}
FacebookRequestError=response.getError();
if(错误!=null){
Toast.makeText(上下文,“ERROR:+ERROR.getErrorMessage(),
吐司。长度(短)。show();
Toast.makeText(上下文,“Errore durante la conditivione su Facebook”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(上下文,“直播condiviso su Facebook”,Toast.LENGTH_SHORT.show();
}
}
};
//
请求=新请求(会话“me/feed”、后参数、HttpMethod.POST、回调);
最终RequestAsyncTask任务=新RequestAsyncTask(请求);
task.execute();
Log.d(“社交”、“发布到facebook墙上的消息”。”;
}
//经验
否则{
Log.d(“社交”,“在张贴墙中,会话为空”);
}
}
其他的
{
Log.d(“社交”、“未登录fb”);
fbloginrequested=真;
}
}
其他的
{
Log.d(“社交”、“未登录fb”);
fbloginrequested=真;
}
}
试试这个代码
private void postImageToFacebook(final Bundle param) {
Session session = Session.getActiveSession();
Session.openActiveSession(this, true, new Session.StatusCallback()
{
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (session.isOpened())
{
Request request = new Request(session,"me/photos", param, HttpMethod.POST, new Request.Callback()
{
@Override
public void onCompleted(Response response)
{
notifyUser("Successfully posted on your wall.");
}
}, null);
RequestAsyncTask asyncTask = new RequestAsyncTask(request);
asyncTask.execute();
}
}
});
}
您必须从您的facebook开发者帐户授予权限。