2013-07-11 145 views
0

林一個問題,當我嘗試用臉書籤署得到的日誌貓以下Facebook的令牌返回其Android空

07-11 10:15:07.757: W/com.facebook.Session(8910): Should not pass a read permission (user_likes) to a request for publish or manage authorization 
07-11 10:15:07.772: W/com.facebook.Session(8910): Should not pass a read permission (email) to a request for publish or manage authorization 
07-11 10:15:07.777: W/com.facebook.Session(8910): Should not pass a read permission (user_birthday) to a request for publish or manage authorization 
07-11 10:15:07.787: W/com.facebook.Session(8910): Should not pass a read permission (user_location) to a request for publish or manage authorization 
07-11 10:15:08.797: V/log_tag(8910): Token= 
07-11 10:15:08.797: V/log_tag(8910): Token=false 

我跟着Facebook的 的適當的文件甚至用代碼來生成SHA鍵,把它放在控制檯 禁用沙盒 使臉書登錄 禁用深層鏈接 但仍是我用臉書沒有運氣 守則以下

facebookBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Session.openActiveSession(SignIn_Rewards.this, true, new Session.StatusCallback() { 

       // callback when session changes state 
       @Override 
       public void call(Session session, SessionState state, 
         Exception exception) { 

        Log.v("log_tag", "Token=" + session.getAccessToken()); 
        Log.v("log_tag", "Token=" + session.isOpened()); 

        Session currentSession = Session.getActiveSession(); 

        if (currentSession == null || currentSession.getState().isClosed()) 
        { 
         session = new Session.Builder(SignIn_Rewards.this).build(); 
         Session.setActiveSession(session); 
         currentSession = session; 
        } 


        else if(!currentSession.isOpened()) 
        { 
         //Ask for username and password 
         OpenRequest op = new Session.OpenRequest(SignIn_Rewards.this); 

         op.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); 
         op.setCallback(null); 

         List<String> permissions = new ArrayList<String>(); 
         permissions.add("publish_stream"); 
         permissions.add("user_likes"); 
         permissions.add("email"); 
         permissions.add("user_birthday"); 
         permissions.add("user_location"); 
         op.setPermissions(permissions); 


         session = new Session.Builder(SignIn_Rewards.this).build(); 
         Session.setActiveSession(session); 
         session.openForPublish(op); 
        } 
        else if (session.isOpened()) { 




         // make request to the /me API 
         Request.executeMeRequestAsync(session, 
           new Request.GraphUserCallback() { 

            // callback after Graph API response with user 
            // object 
            @Override 
            public void onCompleted(GraphUser user, 
              Response response) { 
             if (user != null) { 
              /* TextView welcome = (TextView) findViewById(R.id.welcome); 
              welcome.setText("Hello " 
                + user.getName() + "!");*/ 
              finish(); 

              Log.d("User Name",""+user.getName()+"  "+user.getFirstName()+" "+user.getLastName()+" "+user.getProperty("email")+user.getBirthday()+user.getLocation().getProperty("name")); 
             } 
            } 
           }); 
        } 
       } 
      }); 


     } 
    }) ; 

請糾正我在哪裏我錯了

+0

這是否有幫助:http://stackoverflow.com/questions/15357811/how-to-integrate-facebook-in-my-android-application或http:///stackoverflow.com/questions/15153312/facebook-login-cannot-pass-a-publish-or-manage-permission-email-to-a-request-f – Slartibartfast

+0

沒有與那個運氣 –

+0

您沒有發佈完整代碼,所以我不能確定,但​​是Session.open最常見的原因是沒有做任何事情,因爲你並沒有重寫onActivityResult方法來將結果傳遞給活動會話。 –

回答

0

我一般都看到這個問題發生是因爲散列鍵生成錯誤。而不是做所有keytool的東西,嘗試將這些代碼粘貼到您的onCreate中,以生成正確的密鑰並粘貼到Facebook上的應用部分。

PackageInfo info; 
try { 
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES); 
    for (Signature signature : info.signatures) { 
     MessageDigest md; 
     md = MessageDigest.getInstance("SHA"); 
     md.update(signature.toByteArray()); 
     String something = new String(Base64.encode(md.digest(), 0)); 
     //String something = new String(Base64.encodeBytes(md.digest())); 
     Log.e("hash key", something); 
    } 
} catch (NameNotFoundException e1) { 
    Log.e("name not found", e1.toString()); 
} catch (NoSuchAlgorithmException e) { 
    Log.e("no such an algorithm", e.toString()); 
} catch (Exception e) { 
    Log.e("exception", e.toString()); 
} 

這將在您的logcat中生成密鑰。 檢查this更多的方法來正確生成哈希鍵