如何跟踪从Unity应用程序发送的Facebook appRequest?

时间:2014-01-31 09:43:35

标签: android ios facebook facebook-graph-api unity3d

我想跟踪从“player_1”发送给其他玩家的邀请以计算它们,结果给予“player_1”一些奖励。就像在PVZ2中一样。

好的,Facebook有针对Unity3d的SDK。这是API调用应用程序请求对话框,允许邀请玩家:

public static void AppRequest(
        string message,
        string[] to = null,
        string filters = "",
        string[] excludeIds = null,
        int? maxRecipients = null,
        string data = "",
        string title = "",
        FacebookDelegate callback = null)

Facebook doc说了一些关于redirect_url的内容,可以用来跟踪接受缩进的用户: https://developers.facebook.com/docs/reference/dialogs/requests/

但是Unity插件没有这个参数。

doc也说跟随:

  

请求仅适用于Facebook.com或iOS上的游戏   Android应用。接受游戏的请求将指导该人   到发送请求的应用程序的Canvas页面URL。对于本地人   移动应用程序,接受请求将指导此人到应用程序   在他们的设备上安装或到适当的位置(Apple App   存储或Google Play)以下载应用程序。

游戏仅适用于移动设备。因此我们不需要制作Facebook Canvas应用程序。我应该在我们的网站上实现这个Canvas URL脚本吗?

注入代码(服务器端脚本)以跟踪Facebook应用程序请求的正确位置在哪里?

更新: 感谢Bhavesh Vadalia的回答:https://stackoverflow.com/a/21597185/425707 我决定不在Canvas App中处理好友请求。 这是Facebook SDK 5.0.3的解决方案:

// Quesry string: "/fql?q=SELECT uid, name, is_app_user, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1";
string q = "/fql?q=SELECT+uid,+name,+is_app_user,+pic_square+FROM+user+WHERE+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1+=+me())+AND+is_app_user+=+1";
FB.API(q, Facebook.HttpMethod.GET, friendsResult =>
{
    if (friendsResult.Error != null)
    {
        FbDebug.Error(friendsResult.Error);
    }
    else
    {
        FbDebug.Log(friendsResult.Text);
    }
});

1 个答案:

答案 0 :(得分:4)

这是使用facebook graph api工具为我的应用程序提供跟踪代码的工具。希望它对你也有帮助。

我正在使用facebook 3.6 sdk

private void requestMyAppFacebookFriends(Session session) {
        Request friendsRequest = createRequest(session);
        friendsRequest.setCallback(new Request.Callback() {

            @Override
            public void onCompleted(Response response) {
                List<GraphUser> friends = getResults(response);

                Log.e("RESULT : ", "@"+friends.size());

                for(int i =0;i<friends.size(); i++){

                    GraphUser user = friends.get(i);
                    boolean installed = false;
                    if(user.getProperty("installed") != null){
                        installed = (Boolean) user.getProperty("installed");
                    }
                    if(installed){
                        Log.e("USER NAME", "@"+friends.get(i).getId());
                    }
                }
                // TODO: your code here
            }
        });
        friendsRequest.executeAsync();
    }
 private Request createRequest(Session session) {
        Request request = Request.newGraphPathRequest(session, "me/friends", null);

        Set<String> fields = new HashSet<String>();
        String[] requiredFields = new String[] { "id", "name", "picture","installed" };
        fields.addAll(Arrays.asList(requiredFields));

        Bundle parameters = request.getParameters();
        parameters.putString("fields", TextUtils.join(",", fields));
        request.setParameters(parameters);

        return request;
    }