The gyroscope in an iPhone doesn't actually let you track the direction the camera was facing at the time of a shot. All it does it track motion--it has no frame of reference to determine what point of the compass the camera is actually facing.

The "digital compass" in the iPhone 3G S onwards can give some idea of that, except that it's designed to be used when the iPhone is more or less flat. It would thus require a mirror to be fitted to the camera lens to be useful, and in any case compass data isn't included in the EXIF info. I would expect that any camera providing directional capabilities would be using an equivalent "digital compass" using a magnetometer.

How common is it for cameras to have a gyroscope?
I'm going through the Facebook game tutorial and am on part 5 - Publish Open Graph Story. This part focuses on posting scores to the users score feed. The problem I'm having is that it executes the code, seemingly without any issues, yet does not post the score on Facebook. Here's the code that should post their score:

public void postScore(int score){
    Log.d(TAG, "postScore");
    Session session = Session.getActiveSession();

    if (session == null || !session.isOpened()) {
        Log.d(TAG, "SESSION == NULL OR IS NOT OPENED");
        return;
    }

    List&lt;String&gt; permissions = session.getPermissions();
    if (!permissions.containsAll(PERMISSIONS)) {
        Log.d(TAG, "requestPublishPermissions");
        requestPublishPermissions(session);

    }

    Bundle fbParams = new Bundle();
    fbParams.putString("score", "" + score);
    Request postScoreRequest = new Request(Session.getActiveSession(),
        "me/scores",
        fbParams,
        HttpMethod.POST,
        new Request.Callback() {
            @Override
            public void onCompleted(Response response) {
                FacebookRequestError error = response.getError();
                if (error != null) {
                    Log.d(TAG, "error posting");
                    handleError(error, false);
                }
                Log.d(TAG, "successfully posted");
            }
        });
    Request.executeBatchAsync(postScoreRequest);
}// end of postScore() method


Where PERMISSIONS is defined as:

protected static final List&lt;String&gt; PERMISSIONS = Arrays.asList("publish_actions");


And requestPublishPermissions() is defined as:

protected void requestPublishPermissions(Session session) {
    if (session != null) {
        Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS)
                // demonstrate how to set an audience for the publish permissions,
                // if none are set, this defaults to FRIENDS
                .setDefaultAudience(SessionDefaultAudience.FRIENDS)
                .setRequestCode(REAUTH_ACTIVITY_CODE);
        session.requestNewPublishPermissions(newPermissionsRequest);
    }
}//end of requestPublishPermissions() method


Any help, suggestions, or advice will be appreciated! Thanks!
