0

我正在使用 pushy forpush notifications但我无法device tokendatabase.

    private class RegisterForPushNotificationsAsync extends AsyncTask<Void, Void, Exception> {
    protected Exception doInBackground(Void... params) {
        try {
            // Assign a unique token to this device
            String deviceToken = Pushy.register(getApplicationContext());


            // Log it for debugging purposes
            Log.d("MyApp", "Pushy device token: " + deviceToken);

            // Send the token to your backend server via an HTTP GET request
            new URL("https://key}/register/device?token=" + deviceToken).openConnection();
        } catch (Exception exc) {
            // Return exc to onPostExecute
            return exc;
        }

        // Success
        return null;
    }

    @Override
    protected void onPostExecute(Exception exc) {
        // Failed?
        if (exc != null) {
            // Show error as toast message
            Toast.makeText(getApplicationContext(), exc.toString(), Toast.LENGTH_LONG).show();
            return;
        }

        // Succeeded, optionally do something to alert the user
    }
}

我正在使用retrofit并且http requests没有使用任何类型的backend system

4

1 回答 1

0

你所做的足以让你从 Pushy 服务中获得一个设备令牌。

如果您想捕获返回的设备令牌并使其可供AsyncTask类和一般封闭类访问(如您在评论中所述),那么您可以在封闭类中声明一个全局/实例String变量,例如pushy_device_token

然后在 的doInBackground()方法中AsyncTask,继续分配全局变量,如下所示:

pushy_device_token = Pushy.register(getApplicationContext());

完整代码:

public class EnclosingClass {
  
  String pushy_device_token;
  
  
  //  Additional class code
  
  
  private class RegisterForPushNotificationsAsync extends AsyncTask<Void, Void, Exception> {
  
    @Override
    protected Exception doInBackground(Void... params) {
        try {
            // Assign a unique token to this device
            pushy_device_token = Pushy.register(getApplicationContext());


            // Log it for debugging purposes
            Log.d("MyApp", "Pushy device token: " + deviceToken);

            // Send the token to your backend server via an HTTP GET request
            new URL("https://key}/register/device?token=" + deviceToken).openConnection();
        } catch (Exception exc) {
            // Return exc to onPostExecute
            return exc;
        }

        // Success
        return null;
    }

    @Override
    protected void onPostExecute(Exception exc) {
        // Failed?
        if (exc != null) {
            // Show error as toast message
            Toast.makeText(getApplicationContext(), exc.toString(), Toast.LENGTH_LONG).show();
            return;
        }

        // Succeeded, optionally do something to alert the user
    }
  }
  
}


最佳实践推荐:

最好doInBackground()在方法中返回处理结果onPostExecute(),特别是如果您要进行一些 UI 工作。因此onPostExecute(),您可以对结果做任何您想做的事情,例如向用户显示、报告错误等。

为此,您必须修改您的doInBackground()方法以返回与Object. 所以onPostExecute()将把一个Object作为参数变量。

您将通过以下方式进行修改:

private class RegisterForPushNotificationsAsync extends AsyncTask<Void, Void, Object> { . . .

从中,您可以检查Object接收的 byonPostExecute()是否为 type Exception,在这种情况下,您将显示错误通知,或者检查它是否为 type String,在这种情况下,您将拥有设备令牌,然后您可以继续保存在您的数据库中(Firebase、SQLite 等)。

于 2020-08-13T02:20:13.807 回答