2017-06-23 3 views
1

私はいくつかのネイティブコードを使用してFlutterのFacebook認証プラグインを作成しようとしています。完全にネイティブのテストプロジェクトで作業しているコードがありますが、アンドロイドプラグインプロジェクトで動作するようにはできません。私はAndroidの人ではないので、私の知識は非常に限られています。しかし、これは私が持っているものです:MethodChannelで使用するカスタムFacebook

public class FacebookSignInPlugin implements MethodCallHandler { 

    CallbackManager callbackManager; 
    AccessToken token; 

    /** 
    * Plugin registration. 
    */ 
    public static void registerWith(Registrar registrar) { 
    final MethodChannel channel = new MethodChannel(registrar.messenger(), "facebook_sign_in"); 
    channel.setMethodCallHandler(new FacebookSignInPlugin()); 
    } 


    @Override 
    public void onMethodCall(MethodCall call, Result result) { 
    if (call.method.equals("signInUser")) { 
     callbackManager = CallbackManager.Factory.create(); 
     LoginManager.getInstance().registerCallback(callbackManager, new  FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      token = loginResult.getAccessToken(); 
      Log.d("Facebook", token.toString()); 
     } 

     @Override 
     public void onCancel() { 
      System.out.println("cancel"); 
      Log.d("Facebook", "Cancel"); 
     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
     }); 
     login(); 
     result.success("It works on Android"); 
    } else { 
     result.notImplemented(); 
    } 
    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    public void login() { 
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    } 

    public void logout() { 
    LoginManager.getInstance().logOut(); 
    } 
} 

私は最後の2つの機能:ログイン、ログアウトを使用したいと思います。しかし、メソッド "onActivityResult"では、onActivityResultを解決できず、 "login"でloginWithReadPermissionsと同じ問題が発生するという問題が発生しています。 すべてを正しくインポートする必要があります。 アンドロイドの経験がある人は手伝ってもらえますか?フラッターのプラグインでonActivityResultを使用するためには

答えて

2

は、次の2つのことを行う必要があります。

  1. registerWith静的メソッドでActivityResultListenersのリストにプラグインを追加PluginRegistry.ActivityResultListenerインタフェース
  2. を実装します。

    public class FacebookSignInPlugin implements MethodCallHandler, 
         // Implement PluginRegistry.ActivityResultListener 
         PluginRegistry.ActivityResultListener { 
    
        public static void registerWith(Registrar registrar) { 
         final MethodChannel channel = new MethodChannel(registrar.messenger(), "my_plugin"); 
         final FacebookSignInPlugin instance = new MyPlugin(); 
    
         // Register your plugin as an ActivityResultListener 
         registrar.addActivityResultListener(instance); 
         channel.setMethodCallHandler(instance); 
        } 
    
        private CallbackManager callbackManager = CallbackManager.Factory.create(); 
    
        @Override 
        public void onMethodCall(MethodCall call, final Result result) { 
        } 
    
        @Override 
        public boolean onActivityResult(int i, int i1, Intent intent) { 
         // Forward the activity result to the Facebook CallbackManager 
         callbackManager.onActivityResult(i, i1, intent); 
         return false; 
        } 
    } 
    
    MethodCallビットを取り除き

簡略化した例

関連する問題