Android Facebook SDK 4.0.1中的应用程序请求对话框的新实现是什么

Akh*_*bey 6 android facebook facebook-graph-api facebook-sdk-4.0

我在我的项目中使用旧的Facebook apprequests对话框实现,如:

 Bundle parameters = new Bundle();
 parameters.putString("message","invite friends message...");
 parameters.putString("data","invite friends data...");
 parameters.putString("title","invite friends dialog title...");

 if (facebook != null){
    facebook.dialog(getActivity(), "apprequests", parameters,
        new Facebook.DialogListener() {
            @Override
            public void onComplete(Bundle values) {
                // todo:
            }
        });
  }
Run Code Online (Sandbox Code Playgroud)

我在facebook doc中找到了新的实现.应用邀请

appLinkUrl = "my app link...";
previewImageUrl = "my image url...";

if (AppInviteDialog.canShow()) {
    AppInviteContent content = new AppInviteContent.Builder()
           .setApplinkUrl(appLinkUrl)
           .setPreviewImageUrl(previewImageUrl)
           .build();
    AppInviteDialog.show(activity, content);
}
Run Code Online (Sandbox Code Playgroud)

这是邀请应用程序给朋友或任何其他方式的正确实现?如果是,那么我的消息和数据内容将放在哪里.

或者,如果我使用图形api请求,如:

 String graphPath="/me/apprequests/";
 GraphRequest request = GraphRequest.newGraphPathRequest(
      accessToken, graphPath, graphCallback);

 Bundle parameters = new Bundle();
 parameters.putString("message","invite friends message...");
 parameters.putString("data","invite friends data...");
 parameters.putString("title","invite friends dialog title...");

 request.setParameters(parameters);
 request.executeAsync();
Run Code Online (Sandbox Code Playgroud)

然后得到{"data":[]}回应,没有对话框出现.什么是正确的实现?

Akh*_*bey 2

我得到了解决方案,在下面找到,这是facebook sdk4中应用程序请求对话框的新实现。

    String appLinkUrl = "https://fb.me/...";
    String previewImageUrl = ...;
    final String TAG = "fbv4";

    if (AccessToken.getCurrentAccessToken() == null) {
        // start login...
    } else {
        FacebookSdk.sdkInitialize(activity.getApplicationContext());
        CallbackManager callbackManager = CallbackManager.Factory.create();

        FacebookCallback<AppInviteDialog.Result> facebookCallback= new FacebookCallback<AppInviteDialog.Result>() {
            @Override
            public void onSuccess(AppInviteDialog.Result result) {
                Log.i(TAG, "MainACtivity, InviteCallback - SUCCESS!" + result.getData());
            }

            @Override
            public void onCancel() {
                Log.i(TAG, "MainACtivity, InviteCallback - CANCEL!");
            }

            @Override
            public void onError(FacebookException e) {
                Log.e(TAG, "MainACtivity, InviteCallback - ERROR! " + e.getMessage());
            }
        };

        AppInviteDialog appInviteDialog = new AppInviteDialog(activity);
        if (appInviteDialog.canShow()) {
            AppInviteContent.Builder content = new AppInviteContent.Builder();
            content.setApplinkUrl(appLinkUrl);
            content.setPreviewImageUrl(previewImageUrl);
            AppInviteContent appInviteContent = content.build();
            appInviteDialog.registerCallback(callbackManager, facebookCallback);
            appInviteDialog.show(activity, appInviteContent);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)