【问题标题】:Facebook friends birthdays脸书好友生日
【发布时间】:2013-11-15 12:53:17
【问题描述】:

我正在我的应用程序中集成 facebook sdk。我需要获取用户的朋友姓名和生日。我添加了“read_friendlists”、“user_birthday”、“user_friends”、“friends_birthday”。

当使用应用程序的 Admin facebook ID 登录时,我能够正确获取生日列表。但是当我使用任何其他帐户登录时,JSON 响应中没有生日字段。

PS:我已经禁用了沙盒模式。在应用仪表板中,它显示“此应用已上线(对所有用户可见)”

【问题讨论】:

标签: android facebook facebook-graph-api


【解决方案1】:

对于JSON对象,请放一些代码让我们帮助你。 我个人用它来获取 Facebook 用户的生日 首先,您是否为 user_birthday 设置了权限?如果您想访问 user_birthday 信息,这一点非常重要

如果用户不为空,通常您可以通过 user.getBirthday() 获取生日,因为据我所知,您正在使用新的 facebook SDK

您可以设置权限,例如当您使用 facebook authbutton 时

 authButton.setReadPermissions(Arrays.asList("user_location", "user_birthday", "user_likes"));

或者你可以重新授权

Session.ReauthorizeRequest reauthRequest = new Session.ReauthorizeRequest(this, PERMISSIONS).
                setRequestCode(REAUTHORIZE_ACTIVITY).
                setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
session.reauthorizeForPublish(reauthRequest);

PERMISSION 是一个包含您的权限的数组

【讨论】:

  • 感谢您的回复...请注意,我要获取用户朋友的生日,而不是用户...
【解决方案2】:

好的,试试这个

  String[] facebook_permissions = { "user_photos", "friends_birthday", "friends_photos" };

==========================================================================

public class FriendListAdapter extends BaseAdapter implements SectionIndexer {
private LayoutInflater mInflater;
private String[] sections;
private GetProfilePictures picturesGatherer = null;
FriendsList friendsList;
Hashtable<Integer, FriendItem> listofshit = null;

public FriendListAdapter(FriendsList friendsList) {
    Log.d(LOG_TAG, "FriendListAdapter()");
    this.friendsList = friendsList;
    sections = new String[getCount()];
    listofshit = new Hashtable<Integer, FriendItem>();
    for (int i = 0; i < getCount(); i++) {
        try {
    sections[i] = jsonArray.getJSONObject(i).getString("name").substring(0);
sections[i] = jsonArray.getJSONObject(i).getString("birthday").substring(1);
        } catch (JSONException e) {
            sections[i] = "";
            Log.e(LOG_TAG, "getJSONObject: " + e.getMessage());
        }
    }
    if (picturesGatherer == null) {
        picturesGatherer = new GetProfilePictures();
    }
    picturesGatherer.setAdapterForListener(this);
    mInflater = LayoutInflater.from(friendsList.getBaseContext());
}

public int getCount() {
    Log.d(LOG_TAG, "getCount()");
    if (jsonArray == null)
        return 0;
    return jsonArray.length();
}

public Object getItem(int position) {
    Log.d(LOG_TAG, "getItem()");
    return listofshit.get(position);
}

public long getItemId(int position) {
    Log.d(LOG_TAG, "getItemId()");
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    Log.d(LOG_TAG, "getView(" + position + ")");

    JSONObject jsonObject = null;
    try {
        jsonObject = jsonArray.getJSONObject(position);
    } catch (JSONException e) {
        Log.e(LOG_TAG, "getJSONObject: " + e.getMessage());
    }

    FriendItem friendItem;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.single_friend, null);
        friendItem = new FriendItem();

        convertView.setTag(friendItem);
    }
    else {
        friendItem = (FriendItem) convertView.getTag();
    }

    friendItem.friendPicture = (ImageView) convertView.findViewById(R.id.picture_square);
    friendItem.friendName = (TextView) convertView.findViewById(R.id.name);
    friendItem.friendDob = (TextView) convertView.findViewById(R.id.dob);
    friendItem.friendLayout = (RelativeLayout) convertView.findViewById(R.id.friend_item);

    try {
        String uid = jsonObject.getString("uid");
        String url = jsonObject.getString("pic_square");
        friendItem.friendPicture.setImageBitmap(picturesGatherer.getPicture(uid, url));
    } catch (JSONException e) {
        Log.e(LOG_TAG, "getJSONObject: " + e.getMessage());
        friendItem.friendName.setText("");
        friendItem.friendDob.setText("");
    }

    try {
        friendItem.friendName.setText(jsonObject.getString("name"));
        friendItem.friendDob.setText(jsonObject.getString("birthday"));
    } catch (JSONException e) {
        Log.e(LOG_TAG, "getJSONObject: " + e.getMessage());
        friendItem.friendName.setText("");
        friendItem.friendDob.setText("");
    }

    listofshit.put(position, friendItem);

    return convertView;
}

public int getPositionForSection(int position) {
    return position;
}

public int getSectionForPosition(int position) {
    return position;
}

public Object[] getSections() {
    return sections;
}
}

class FriendItem {
TextView friendDob;
int id;
ImageView friendPicture;
TextView friendName;
RelativeLayout friendLayout;

}

==============================================================================

String query = "select name, uid, pic_square, birthday from user where uid in 
(select uid2 from friend where uid1=me()) order by name";

【讨论】:

  • 你也可以在这里看到这篇文章link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多