无法将Google Fit OAuth 2.0与WearOS App相关联

问题描述 投票:1回答:1

我正试图搞乱Google Fit API。我有一个WearOS仿真器连接到我的实际设备(三星Galaxy)。当我运行应用程序时,我很确定我应该弹出一个屏幕来询问权限,但我没有得到这样的屏幕。我在Google API控制台中完成了获取令牌的过程。

public class GoalsListActivity extends WearableActivity {

    public static final String TAG = "BasicRecordingApi";
    private static final int REQUEST_OAUTH_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.goals_screen_layout);

        accessGoogleFit();

        // Enables Always-on
        setAmbientEnabled();
    }




    /**
     * Check if the user has permissions to talk to Fitness APIs; otherwise authetnciate the user and request required permissions
     */

    private void accessGoogleFit() {

        FitnessOptions fitnessOptions = getFitnessSignInOptions();

        if (!hasOAuthPermission()) {
            GoogleSignIn.requestPermissions(this, REQUEST_OAUTH_REQUEST_CODE, GoogleSignIn.getLastSignedInAccount(this), fitnessOptions);
        } else {
            subscribeToRecordingApi();
        }
    }

    /**
     * Create a FitnessOptions instance, declaring the Fit API data types and access required by the app
     *
     * @return FitnessOptions object
     */


    private FitnessOptions getFitnessSignInOptions() {
        FitnessOptions fitnessOptions = FitnessOptions.builder()
                .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                .build();
        return fitnessOptions;
    }


    /**
     * Check if user's account has OAuth permission to Fit API
     *
     * @return true if user has OAuth permission
     */


    private boolean hasOAuthPermission() {
        FitnessOptions fitnessOptions = getFitnessSignInOptions();

        //Check if the user has previously granted the necessary data access, and if not, inititate the authroization flow
        boolean hasAuthO = GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(this), fitnessOptions);
        return hasAuthO;
    }

    //If the user does not have necessary data access, inititate the authorization flow
    private void requestOAuthPermission() {
        FitnessOptions fitnessOptions = getFitnessSignInOptions();
        GoogleSignIn.requestPermissions(
                this, //our activity
                REQUEST_OAUTH_REQUEST_CODE,
                GoogleSignIn.getLastSignedInAccount(this),
                fitnessOptions);

    }

    /**
     * SUBSCRIBE TO FITNESS DATA
     * To record data from the sensors, we need to first create a subscription.
     * To create a subscription, invoke the Recording API.  As soon as the subscription is active, fitness data will start recording
     */


    private void subscribeToRecordingApi() {

        Fitness.getRecordingClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .subscribe(DataType.TYPE_ACTIVITY_SAMPLES)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                        Log.i(TAG, "Successfully subscribed!");
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.i(TAG, "There was a problem subscribing");
                    }
                });
    }

    /**
     * Get a list of all active subscriptions
     */

    private void getAllActiveSubscriptions() {
        Fitness.getRecordingClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .listSubscriptions(DataType.TYPE_ACTIVITY_SAMPLES)
                .addOnSuccessListener(new OnSuccessListener<List<Subscription>>() {
                    @Override
                    public void onSuccess(List<Subscription> subscriptions) {
                        for (Subscription sc : subscriptions) {
                            DataType dt = sc.getDataType();
                            Log.i(TAG, "Active subscription for data type: " + dt.getName());
                        }
                    }
                });
    }


    /**
     * UNSUBSCRIBE - STOP COLLECTING SENSOR DATA IN THE APP
     * Cancels the ACTIVITY_SAMPLE subscription on that {@link DataType}
     */


    public void stopRecording() {

        final String dataTypeStr = DataType.TYPE_ACTIVITY_SAMPLES.toString();
        Log.i(TAG, "Unsubscribing from data type: " + dataTypeStr);

        //Invoke the Recording API to unsubscribe from the data type and specify a callback that will check the result
        Fitness.getRecordingClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .unsubscribe(DataType.TYPE_ACTIVITY_SAMPLES)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.i("TAG", "Successfully unsubscribed for data type: " + dataTypeStr);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        //The subscription was not removed
                        Log.i(TAG, "Failed to unsubscribe for data type: " + dataTypeStr);
                    }
                });
    }


}

该代码基本上来自enter link description here,这是Google自己的示例代码。我有API密钥。出于某种原因,我无法让它发挥作用。谢谢。

android wear-os google-fit
1个回答
0
投票

你可以替换你所有的

GoogleSignIn.getLastSignedInAccount(this)

GoogleSignIn.getAccountForExtension(this, fitnessOptions);
© www.soinside.com 2019 - 2024. All rights reserved.